2016-10-24 11 views
0

foreachループ内で一致する多次元配列を構築しようとしています。 1つのループの後、配列は正しいが、2番目のループでは、以前の配列の値が上書きされます。何が起こっている?foreachループ内のArray_pushは以前のarrey値よりも優先されます

$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)))) 

あなたはLINENO 3は、第二のループの最初の配列を交換されている見ることができるように。どうして?

+0

外部ループを開始するたびに、$一致を空の配列にリセットします。それを取り出してみてください。 –

答えて

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

は、私はあなたが"SAVING"=>"0"を固定ではなく、あなたがもう一度あなたのコードを実行しましたあなたの出力は、他の結果[SAVING] => 5を持って参照してください?

$promotions$saleitemsの配列を渡す必要があります。

1

ループ内の$matches = array();が配列を再初期化します。ループの前の$matches = array();は問題ありません。

関連する問題