我有两个动物阵列(例如)。

$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将两个数组合并为一个?

===============>>#1 票数:10

@Andy

http://se.php.net/array_merge

这是我的第一个想法,但它并没有完全奏效 - 但是array_merge_recursive可能会起作用 - 现在懒得检查。

===============>>#2 票数:3

首先,为什么不使用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); 
}

至少这样的事情。 也许有更好的解决方案?

===============>>#3 票数:3 已采纳

这就是Erik建议的(id no。作为数组键)并将$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'];
    }
}

===============>>#4 票数:3

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

===============>>#5 票数:1

我更喜欢array_splice而不是array_merge因为它的性能问题,我的解决方案是:

<?php 
array_splice($array1,count($array1),0,$array2);
?>

===============>>#6 票数:1

foreach ($array as $a)
    $new_array[$a['id']]['name'] = $a['name'];

foreach ($array2 as $a)
    $new_array[$a['id']]['age'] = $a['age'];

这是结果:

    [1] => Array
        (
            [name] => Cat
            [age] => 123
        )

    [2] => Array
        (
            [name] => Mouse
            [age] => 321
        )

===============>>#7 票数:1

<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>

===============>>#8 票数:1

使用PHP 5.3,您可以使用array_replace_recursive()进行此类合并

http://www.php.net/manual/en/function.array-replace-recursive.php

你得到的数组应该是这样的:

Array (
    [0] => Array
        (
            [id] => 2
            [name] => Cat
            [age] => 321
        )

    [1] => Array
        (
            [id] => 1
            [name] => Mouse
            [age] => 123
        )
)

这就是我认为你想要的结果。

===============>>#9 票数:1

@Andy

我已经看过了,并没有看到它如何帮助合并多维数组。 也许你可以举一个例子。

@kevin

这可能是我需要做的,因为我认为下面的代码会很慢。 实际的代码有点不同,因为我正在使用ADOdb(和ODBC用于其他查询),但我会让它工作并发布我自己的答案。

这是有效的,但我认为它会非常慢,因为它每次都经历第二个循环:

foreach($array as &$animal)
{
    foreach($array2 as $animal2)
    {
        if($animal['id'] === $animal2['id'])
        {
            $animal = array_merge($animal, $animal2);
            break;
        }
    }
}

===============>>#10 票数:-3

$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;
}

  ask by Annan translate from so

未解决问题?本站智能推荐:

2回复

PHP合并子数组

所以我有2个数组,像这样: 现在我想分别合并子数组: 导致: 好吧,这行得通...但是看起来很笨拙,如果我需要合并可变数量的子数组,这不是一个好的解决方案。 是否有用于此类操作的内置函数(或更简便的方法)?
3回复

PHP:合并2个数组

我已经尝试了以下一天,但无法正常工作。 我从分页来源获取信息(在此示例中为3页。因此,我要合并3个数组: 我正在寻找的结果是将它们合并为1个数组,因此我可以返回该数组。 我遇到的问题是,由于记录的索引号相同,因此使用array_merge将无法正常工作。 我尝试了以下
4回复

PHP:数组合并

我对php比较陌生,对不起,如果我没有正确询问问题。 它在这里: 我的数组: 来自代码: 如何将其合并为一个数组,如下所示: 我已经尝试了很多从array_merge到array_combine的代码,但似乎并没有解决这个问题。 是我在代码中缺少的东西,还是有可
2回复

php-合并数组

我有两个数组,我想以特定的方式在php中合并。 因此,在我尝试和失败时,我需要您的帮助来帮助我。 所以说我有两个数组: 现在,在合并过程中,我希望添加公共密钥的值 。 因此,就像foo存在于array1和array2中一样,所以当将array1与array 2合并时,我应该得到
1回复

PHP数组合并

我有3个数组代表按日期分组的数据计数$dummyArray1 = array('year' => array('month' => 'count')); 我需要将它们分组在1个数组中,以便每个月我都有每个数组的count数值。 如果特定月份中不存在计数数据,则应插入0作为c
4回复

用PHP合并数组

Coalesce实际上不是正确的词,因为它返回第一个非NULL值,但希望它传达了意图。 有没有更易读和简洁的方法来从$arr , $_GET和$_POST获取foo的第一个定义值?
2回复

合并数组-PHP

我有一个像这样的数组: 我想要一个像这样的最终字符串: 现在我已经花了一个多小时来解决这个问题,但是还没有结果,有人可以帮助我吗? 我将不胜感激。 谢谢 ====================================== 我试过的 $arr是一
3回复

PHP合并数组?

我有2个数组,我需要将它们合并为一个数组,但使用array_merge值会出现问题,并且最终数组不正确。 我尝试$ array1 + $ array2,但是发生同样的事情。 目前,我不知道如何解决它。 更新:在我的情况下,array_merge和array_merge_recurs
3回复

合并PHP数组

我目前正在研究一个项目,该项目允许用户创建任意数量的新闻标题,文章和图像,该系统的唯一规则是标题必须包含文章和图像。 我的问题在我提交的表单上,我得到2个数组,一个是$_POST ,另一个是$_FILES 。 $ _POST $ _FILES 基本上,提交表单后的方法是将
1回复

PHP如何合并数组?

如何将多个数组合并为具有相同列的数组。 我的代码就像 它们都具有相同的列,如id , name , password ,我只想将所有结果合并为一个。