Array_push в каждом цикле переопределяет более ранние значения arrey

#php #arrays #foreach

#php #массивы #foreach

Вопрос:

Я пытаюсь создать многомерный массив совпадений, найденных в цикле foreach. После одного цикла массив является правильным, но во втором цикле более ранние значения массива перезаписываются. Что происходит?

 $matches = array();
foreach ($promotions as $promotion) {
   $matches = array();
   foreach ($saleitems as $saleitem) {
     if ($saleitem['PROMO_CODE'] == $promotion['SALES_CODE']) {
       $matches[] = array('ID'=>$saleitem['ID'], "LINENO"=>$saleitem['LINE'], "SAVING"=>"0", 'SALEINC'=>$saleitem['SALEINC']);
     }
   }
//other code with works out discount etc.
$linesarray[] = array("CODE"=>$promotion['CODE'], "LINES"=>$matches);
print_r($linesarray);
echo "<p>";
}
  

Выводит это:

 Array ( [0] => Array ( [CODE] => 5 [LINES] => Array ( [0] => Array ([ID] => 51016 [LINENO] => 4 [SAVING] => 5 [SALEINC] => 15.00 ) [1] => Array ([ID] => 51013 [LINENO] => 3 [SAVING] => 5 [SALEINC] => 15.00 ) ) ) )

Array ( [0] => Array ( [CODE] => 5 [LINES] => Array ( [0] => Array ( [ID] => 51016 [LINENO] => 4 [SAVING] => 5 [SALEINC] => 15.00 ) [1] => Array ([ID] => 43930 [LINENO] => 2 [SAVING] => 0 [SALEINC] => 16.00 ) ) ) [1] => Array ( [CODE] => 7 [LINES] => Array ( [0] => Array ([ID] => 43914 [LINENO] => 1 [SAVING] => 6 [SALEINC] => 16.00 ) [1] => Array ([ID] => 43930 [LINENO] => 2 [SAVING] => 6 [SALEINC] => 16.00 ) ) ) )
  

Как вы можете видеть, в строке 3 был заменен первый массив во втором цикле. Почему?

Комментарии:

1. Каждый раз, когда вы запускаете этот внешний цикл, вы сбрасываете $matches в пустой массив. Попробуйте удалить это.

Ответ №1:

$matches = array(); Внутри цикла массив будет повторно инициализирован. $matches = array(); Перед циклом все в порядке.

Ответ №2:

    $matches[] = array('ID'=>$saleitem['ID'], "LINENO"=>$saleitem['LINE'], "SAVING"=>"0", 'SALEINC'=>$saleitem['SALEINC']);
  

Я вижу, что вы исправили, "SAVING"=>"0" но ваши выходные данные имеют другой результат [SAVING] => 5 Вы снова запускали свой код?

Вы должны предоставить нам $promotions и $saleitems массив.