根据第一列值合并两个索引数组的索引数组

问题描述 投票:0回答:2

我有两个这样的数组:

$array1 = [
    [10, 'Some Name..'],
    [11, 'Some Name..'],
    [13, 'Some Name..'],
];

$array2 = [
    [13, 'Viewed']
];

如何在不循环的情况下合并这两个数组?有没有可用的 php 功能?我需要这种输出:

[
    [10, 'Some Name..'],
    [11, 'Some Name..'],
    [13, 'Some Name..', 'Viewed']
]
php arrays multidimensional-array merge grouping
2个回答
5
投票

您可以使用 PHP 函数 array_merge_recursive。 看例子:

<?php
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);
print_r($result);
?>

2
投票

不会有非循环的方式来实现这一点。也许您正在寻求基于函数的语法,但对于这种情况,我认为这只会引入不必要的卷积。

为了获得最佳效率,请生成一个兼作查找数组的结果数组。如果结果数组中已经存在该键,则只需将

[1]
值推入该行即可。如果您想重新索引结果,只需调用
array_values()
即可。

代码:(演示

$array1 = [
    [10, 'Some Name..'],
    [11, 'Some Name..'],
    [13, 'Some Name..'],
];

$array2 = [
    [13, 'Viewed']
];

$result = [];
foreach (array_merge($array1, $array2) as $row) {
    if (!isset($result[$row[0]])) {
        $result[$row[0]] = $row;
    } else {
        $result[$row[0]][] = $row[1];
    }
}

var_export($result);

功能风格:(演示)

var_export(
    array_reduce(
        array_merge($array1, $array2),
        function($result, $row) {
            if (!isset($result[$row[0]])) {
                $result[$row[0]] = $row;
            } else {
                $result[$row[0]][] = $row[1];
            }
            return $result;
        }
    )
);

由于此任务需要合并第一列并保留(追加)所有第二列值,因此可以使用无条件方法来获得相同的结果。 代码:(演示

$result = [];
foreach (array_merge($array1, $array2) as [$id, $value]) {
    $result[$id][0] = $id;
    $result[$id][] = $value;
}

var_export($result);
© www.soinside.com 2019 - 2024. All rights reserved.