我有两个这样的数组:
$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 函数 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);
?>
不会有非循环的方式来实现这一点。也许您正在寻求基于函数的语法,但对于这种情况,我认为这只会引入不必要的卷积。
为了获得最佳效率,请生成一个兼作查找数组的结果数组。如果结果数组中已经存在该键,则只需将
[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);