I have two arrays, $array1
and $array2
. $array2
is an array of arrays. For each subarray of $array2
, I want to print $array1
but with additional entries that depend on whether the $array2
subarray has keys "a"
or "c"
with value 1
. My code prints $array1
each loop, but there are additional entries in $array1
for the later iterations that I wasn't expecting. Why do I get these entries, and how do I prevent them?
Sample code:
$array1 = array(
"service" => "coding",
"data" => array(
"ITEM" => array(
array(
"CODE" => "9999", //STANDARD
"QUANTITY" => 1
),
)
)
);
$array2 = array(
array(
"a" => "1",
"b" => "1",
"c" => "1",
"d" => "1",
),
array(
"cancel" => "1",
"a" => "1",
"b" => "",
"c" => "",
"d" => "1",
),
array(
"cancel" => "1",
"a" => "",
"b" => "1",
"c" => "1",
"d" => "",
),
);
for ($i = 0; $i < count($array2); $i++) {
foreach ($array2[$i] as $key => $value) {
if($key == 'a' && $value == 1){
array_push($array1['data']['ITEM'],
array('SOMETHING' => 'this_is_a',
'ELSE' => "1"
)
);
}
if($key == 'c' && $value == 1){
array_push($array1['data']['ITEM'],
array('SOMETHING' => 'this_is_c',
'ELSE' => "1"
)
);
}
}
echo "Loop #$i result:\n";
var_export($array1);
echo "\n";
}
You can test the above code as a PHP Sandbox snippet.
The actual result is:
Loop #0 result: array ( 'service' => 'coding', 'data' => array ( 'ITEM' => array ( 0 => array ( 'CODE' => '9999', 'QUANTITY' => 1, ), 1 => array ( 'SOMETHING' => 'this_is_a', 'ELSE' => '1', ), 2 => array ( 'SOMETHING' => 'this_is_c', 'ELSE' => '1', ), ), ), ) Loop #1 result: array ( 'service' => 'coding', 'data' => array ( 'ITEM' => array ( 0 => array ( 'CODE' => '9999', 'QUANTITY' => 1, ), 1 => array ( 'SOMETHING' => 'this_is_a', 'ELSE' => '1', ), 2 => array ( 'SOMETHING' => 'this_is_c', 'ELSE' => '1', ), 3 => array ( 'SOMETHING' => 'this_is_a', 'ELSE' => '1', ), ), ), ) Loop #2 result: array ( 'service' => 'coding', 'data' => array ( 'ITEM' => array ( 0 => array ( 'CODE' => '9999', 'QUANTITY' => 1, ), 1 => array ( 'SOMETHING' => 'this_is_a', 'ELSE' => '1', ), 2 => array ( 'SOMETHING' => 'this_is_c', 'ELSE' => '1', ), 3 => array ( 'SOMETHING' => 'this_is_a', 'ELSE' => '1', ), 4 => array ( 'SOMETHING' => 'this_is_c', 'ELSE' => '1', ), ), ), )
The loop #0 result is correct, but the later loops have additional entries in $array1['data']['ITEM']
. Desired result:
Loop #0 result: array ( 'service' => coding 'data' => array ( 'ITEM' => array ( 0 => array ( 'CODE' => 9999 'QUANTITY' => 1 ) 1 => array ( 'SOMETHING' => 'this_is_a' 'ELSE' => 1 ) 2 => array ( 'SOMETHING' => 'this_is_c' 'ELSE' => 1 ) ) ) ) Loop #1 result: array ( 'service' => coding 'data' => array ( 'ITEM' => array ( 0 => array ( 'CODE' => 9999 'QUANTITY' => 1 ) 1 => array ( 'SOMETHING' => 'this_is_a' 'ELSE' => 1 ) ) ) ) Loop #2 result: array ( 'service' => coding 'data' => array ( 'ITEM' => array ( 0 => array ( 'CODE' => 9999 'QUANTITY' => 1 ) 1 => array ( 'SOMETHING' => 'this_is_c' 'ELSE' => 1 ) ) ) )