如何合并PHP数组?
时间:2020-03-05 18:42:36 来源:igfitidea点击:
我有两种动物(例如)。
$array = array( array( 'id' => 1, 'name' => 'Cat', ), array( 'id' => 2, 'name' => 'Mouse', ) ); $array2 = array( array( 'id' => 2, 'age' => 321, ), array( 'id' => 1, 'age' => 123, ) );
如何通过ID将两个数组合并为一个?
解决方案
回答
首先,为什么不使用ID作为索引(或者键,在php数组为imo的映射样式数组中)?
$array = array( 1 => array( 'name' => 'Cat', ), 2 => array( 'name' => 'Mouse', ) );
之后,我们将需要遍历一个数组,对另一个数组执行array_merge:
foreach($array2 as $key=>$value) { if(!is_array($array[$key])) $array[$key] = $value; else $array[$key] = array_merge($array[key], $value); }
至少是这样的。也许有更好的解决方案?
回答
这完成了Erik的建议(将ID号作为数组的键),并将$ array2中的vlaues合并到$ results中。
$results = array(); foreach($array as $subarray) { $results[$subarray['id']] = array('name' => $subarray['name']); } foreach($array2 as $subarray) { if(array_key_exists($subarray['id'], $results)) { // Loop through $subarray would go here if you have extra $results[$subarray['id']]['age'] = $subarray['age']; } }
回答
$new = array(); foreach ($array as $arr) { $match = false; foreach ($array2 as $arr2) { if ($arr['id'] == $arr2['id']) { $match = true; $new[] = array_merge($arr, $arr2); break; } } if ( !$match ) $new[] = $arr; }
回答
@安迪
http://se.php.net/array_merge
这是我的第一个想法,但是并不能完全起作用,但是array_merge_recursive可能太懒了以至于现在无法检查。
回答
@安迪
我已经看过了,还没有看到它如何帮助合并多维数组。也许我们可以举个例子。
@凯文
这可能是我将需要做的,因为我认为下面的代码将非常慢。
实际的代码有所不同,因为我使用的是ADOdb(其他查询使用ODBC),但是我将使其工作并发布自己的答案。
这行得通,但是我认为每次经过第二个循环都会非常慢:
foreach($array as &$animal) { foreach($array2 as $animal2) { if($animal['id'] === $animal2['id']) { $animal = array_merge($animal, $animal2); break; } } }
回答
<?php $a = array('a' => '1', 'b' => array('t' => '4', 'g' => array('e' => '8'))); $b = array('c' => '3', 'b' => array('0' => '4', 'g' => array('h' => '5', 'v' => '9'))); $c = array_merge_recursive($a, $b); print_r($c); ?>
array_merge_recursive递归合并两个或者更多数组
输出:
Array ( [a] => 1 [b] => Array ( [t] => 4 [g] => Array ( [e] => 8 [h] => 5 [v] => 9 ) [0] => 4 ) [c] => 3 )