У меня есть два массива:
$a1 = array( array('fisrtname' => 'john', 'lastname' => 'smith', 'c1' => 10), array('fisrtname' => 'jane', 'lastname' => 'smith', 'c1' => 20), ... ); $a2 = = array( array('fisrtname' => 'john', 'lastname' => 'smith', 'c2' => 40), array('fisrtname' => 'jane', 'lastname' => 'smith', 'c2' => 50), ... );
Мне нужно объединить эти два:
$a3 = = array( array('fisrtname' => 'john', 'lastname' => 'smith', 'c1' => 10, 'c2' => 40), array('fisrtname' => 'jane', 'lastname' => 'smith', 'c1' => 20, 'c2' => 50), ... );
Как я могу сделать это с помощью PHP и меньше кода?
Функция, которую вы ищете, вероятно, всего лишь один вызов функции: array_replace_recursive ()
$a1 = array( array('fisrtname' => 'john', 'lastname' => 'smith', 'c1' => 10), array('fisrtname' => 'jane', 'lastname' => 'smith', 'c1' => 20), ); $a2 = array( array('fisrtname' => 'john', 'lastname' => 'smith', 'c2' => 40), array('fisrtname' => 'jane', 'lastname' => 'smith', 'c2' => 50), ); $result = array_replace_recursive($a1, $a2); var_dump($result);
который дает:
array(2) { [0]=> array(4) { ["fisrtname"]=> string(4) "john" ["lastname"]=> string(5) "smith" ["c1"]=> int(10) ["c2"]=> int(40) } [1]=> array(4) { ["fisrtname"]=> string(4) "jane" ["lastname"]=> string(5) "smith" ["c1"]=> int(20) ["c2"]=> int(50) } }
Для этого вы можете использовать функции array_map и array_merge .
$a3 = array_map("array_merge",$a1, $a2);
Если длина массива a1 и a2 одинакова, вы можете использовать следующий код:
<?php $a1 = array( array('fisrtname' => 'john', 'lastname' => 'smith', 'c1' => 10), array('fisrtname' => 'jane', 'lastname' => 'smith', 'c1' => 20) ); $a2 = array( array('fisrtname' => 'john', 'lastname' => 'smith', 'c2' => 40), array('fisrtname' => 'jane', 'lastname' => 'smith', 'c2' => 50) ); for ($i=0; $i < count($a1); $i++) { $a3[$i] = array_merge($a1[$i],$a2[$i]); $a3[$i] = array_unique($a3[$i]); } var_dump($a3); ?>