繁体   English   中英

基于公共列值将两个 arrays 组合成单个数组

[英]Combine two arrays into a single array based on a common column value

我正在尝试将两个 arrays 结合起来,同时尊重它们的共享价值。

$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")
);

我预期的 output:

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

我的 output 是:

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
        )

)

如何在同一个数组中组合键值? 或者我怎样才能带来预期的output?

注意:我正在尝试使用 value 而不是 key ref: PHP Array Merge two Arrays on the same key

或者,您可以在这种情况下使用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);

您可以使用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);

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

将临时第一级键分配给您的第一个数组以帮助识别行。 然后将第二个数组和 append 将所需的列值循环到适当的组。 使用array_values()循环后重新索引数组。

代码:(演示

$result = array_column($array1, null, 'id');
foreach ($array2 as $row) {
    $result[$row['id']]['second_name'] = $row['second_name'];
}
var_export(array_values($result));

这是一种比使用嵌套循环的蛮力扫描 arrays 更直接的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM