如何合并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
)