2013-02-12 5 views
1

Это делает меня безумным. Я проверил свои входы/выходы, и я все еще получаю неожиданное поведение. Это должно быть 2, но он делает numa numa. Что мне не хватает?PHP foreach петли

Вход:

data 
Array 
(
    [0] => Array 
     (
      [lineId] => 1 
      [quantity] => 2 
      [costPerItem] => 16.585 
      [itemId] => 1 
     ) 

) 

Код:

printr($data, 'data'); 
foreach($data as $i => $value){ 
    foreach($value as $key => $a){ 
     echo 'key: '.$key.' - a: '.$a.'<br />'; 
     ($key == 'quantity') ? $dataQuantity[$i] = $a : $dataQuantity[$i] = 'numanuma'; 
    } 
} 
printr($dataQuantity, 'data quantity'); 

Выход:

key: lineId - a: 1 
key: quantity - a: 2 
key: costPerItem - a: 16.585 
key: itemId - a: 1 

data quantity 
Array 
(
    [0] => numanuma 
) 
+0

Я не вижу 'break' заявление в своем коде. –

+0

Я не нарушаю петлю foreach здесь, и мне не нужно. Я скинул код вниз, пытаясь его отладить. – phpmeh

+0

+1 для numanuma – Nick

ответ

2

Есть несколько вещей неправильно с этим.

Во-первых, вы устанавливаете значение $dataQuantity[$i] в своем подцикле, но $i увеличивается в вашем внешнем цикле.

Когда код видит «количество» может установить $dataQuantity[$i] к 2, но тогда он видит itemId и отменяет $dataQuantity[$i] так $i не изменилась.

Во-вторых, вы должны изменить свое заявление, если тройного к этому:

$dataQuantity[$i] = ($key == 'quantity') ? $a : 'numanuma'; 

Это не фактор для того, что я уже говорил ранее.

Вот рабочий пример:

printr($data, 'data'); 
foreach($data as $i => $value){ 
    foreach($value as $key => $a){ 
     if ($key == 'quantity') { 
      $dataQuantity[$i] = $a; 
      break; 
     } 
    } 
} 
printr($dataQuantity, 'data quantity'); 
2

Вы назначаете "numanuma", если ключ а не «количество». После клавиши «количество» некоторые клавиши: не количество, поэтому «numanuma» назначается над значением $a.

Короткий ответ, добавьте дополнительную проверку и флаг, чтобы проверить, правильно ли присвоено $dataQuantity[$i], прежде чем назначить «numanuma».

3

Это потому, что key itemId после ключа количества. Таким образом, он был установлен в 2, но цикл после того, как он был установлен на numanuma.

Попробуйте это:

printr($data, 'data'); 
foreach($data as $i => $value){ 
    foreach($value as $key => $a){ 
     echo 'key: '.$key.' - a: '.$a.'<br />'; 
     if($key == 'quantity') 
     { 
      $dataQuantity[$i] = $a; 
     } 
    } 
} 
printr($dataQuantity, 'data quantity'); 
+0

Ничего себе, я добавил, что троянец пытается отладить, и это была глупая ошибка. Благодарю. – phpmeh

0

троичного оператор не используется для присвоения значения, пожалуйста, прочитайте это:

Примечания: Пожалуйста, обратите внимание, что тройной оператором является утверждением, и что она не оценивает к переменной, но к результату оператора . Это важно знать, хотите ли вы возвратить переменную по ссылке. Оператор возвращает $ var == 42? $ a: $ b; в функция возврата по ссылке не будет работать, а предупреждение - , выпущенное в более поздних версиях PHP.

Source

Смежные вопросы