【问题标题】:Combine two array in to single array with common value将两个数组合并为具有共同值的单个数组
【发布时间】:2014-11-06 10:34:59
【问题描述】:

我正在尝试 Cobain 两个具有键值的数组是常见的,但我面临一些逻辑问题:

$array1 = array(
    array("id" => "1","name"=>"John"),
    array("id" => "2","name"=>"Peter"),
    array("id" => "3","name"=>"Tom"),
    array("id" => "12","name"=>"Astro")
);

$array2 = array(
    array("id" => "1","second_name"=>"Lim"),
    array("id" => "2","second_name"=>"Parker"),
    array("id" => "3","second_name"=>"PHP")
);

我的预期输出数组?

$result = array(
    array("id" => "1","name"=>"John","second_name"=>"Lim"),
    array("id" => "2","name"=>"Peter","second_name"=>"Parker"),
    array("id" => "3","name"=>"Tom","second_name"=>"PHP"),
    array("id" => "12","name"=>"Astro")
);

我试过了

$arraycomb = array_unique(array_merge($array1,$array2), SORT_REGULAR);

我的输出是:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => John
        )

    [1] => Array
        (
            [id] => 2
            [name] => Peter
        )

    [2] => Array
        (
            [id] => 3
            [name] => Tom
        )

    [3] => Array
        (
            [id] => 12
            [name] => Astro
        )

    [4] => Array
        (
            [id] => 1
            [second_name] => Lim
        )

    [5] => Array
        (
            [id] => 2
            [second_name] => Parker
        )

    [6] => Array
        (
            [id] => 3
            [second_name] => PHP
        )

)

2 。如何在同一个数组中对键值进行 Cobain?或者我怎样才能把 Expected 拿出来但是?

注意:我正在尝试获取值而不是键 ref:PHP Array Merge two Arrays on same key

【问题讨论】:

  • 最终数组的大小是多少。等于第一个数组还是第二个数组??

标签: php arrays


【解决方案1】:

或者,您可以在这种情况下使用 foreach,然后在它们共享相同的 id 键时合并它们

使用参考&

foreach($array1 as &$value1) {
    foreach ($array2 as $value2) {
        if($value1['id'] == $value2['id']) {
            $value1 = array_merge($value1, $value2);
        }
    }
}

echo '<pre>';
print_r($array1);

【讨论】:

  • @AresDraguna 和 AresDraguna 谢谢你的帮助,让我明白了。sgt 提供的逻辑帮助我得到了预期的输出。
  • @AresDraguna 哪个答案在执行过程中花费的时间更少?当我接受答案时,其他人可能会尝试使用代码......
  • @TomPHP :)) 怎么来的?因此,如果您在第一个数组的第 4 个位置有 array("id" =&gt; "12","name"=&gt;"Astro"),在第二个数组的第 4 个位置有 array("id" =&gt; "7","second_name"=&gt;"Lim"),,您想要合并或映射不同的 id?他们有不同的ID!我不明白...
  • @AresDraguna 如果 ID 不同那么数组应该只是合并到他的结果数组...检查 Expected OutPut Array 以获得更好的理解。
  • 当然……我不是在评判他想要达到什么,我只是说,在我看来,逻辑是错误的……我是一个“纯种”PHP程序员对我来说,事情必须符合逻辑,否则我无法编码:))这是我生活中最大的弱点之一
【解决方案2】:

您可以为此使用array_map()。试试这个 -

function modifyArray($a, $b)
{
    if (!empty($a) && !empty($b)) {
        return array_merge($a, $b);
    } else if (!empty($a) && empty($b)) {
        return $a;
    }  else if (empty($a) && !empty($b)) {
        return $b;
    }
}

$new = array_map("modifyArray", $array1, $array2);
var_dump($new);

它将生成一个新数组,其中包含两个数组中的所有值。如果第一个数组的元素为空,则第二个数组将被合并,反之亦然。

【讨论】:

  • 此解决方案仅在 id 不重要的情况下才有帮助,因为当它们合并时,id 会重叠。
  • 是的!我添加了一个备用密钥以获取 ID 以供参考。谢谢!!
猜你喜欢
  • 2019-12-28
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 2020-02-20
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
相关资源
最近更新 更多