📅  最后修改于: 2023-12-03 14:45:22.865000             🧑  作者: Mango
在 PHP 中,经常需要将具有相同值的数组合并在一起,以便更方便地处理数据。 下面是一些在 PHP 中合并具有相同值的数组的方法。
使用循环是最基本的方法,可以按照以下步骤合并相同值的数组:
以下是示例代码:
// 原始数组
$array = [
['id' => 1, 'name' => 'foo'],
['id' => 2, 'name' => 'bar'],
['id' => 1, 'name' => 'baz'],
];
// 创建一个新的数组
$newArray = [];
// 循环遍历原始数组
foreach ($array as $item) {
// 判断是否已经有相同的值
if (isset($newArray[$item['id']])) {
// 如果有相同的值,则将这些值的数组合并在一起
$newArray[$item['id']]['name'] .= ', ' . $item['name'];
} else {
// 如果没有相同的值,则直接存储到新的数组中
$newArray[$item['id']] = $item;
}
}
// 返回新的数组
print_r($newArray);
此代码片段将输出以下结果:
Array
(
[1] => Array
(
[id] => 1
[name] => foo, baz
)
[2] => Array
(
[id] => 2
[name] => bar
)
)
array_reduce 函数是 PHP 中非常有用的函数之一,可以用于将数组元素缩减为单个值。 可以使用此函数将具有相同值的数组合并在一起,如下所示:
以下是示例代码:
// 原始数组
$array = [
['id' => 1, 'name' => 'foo'],
['id' => 2, 'name' => 'bar'],
['id' => 1, 'name' => 'baz'],
];
// 使用 array_reduce 函数将原始数组缩减为一个单独的值
$reduced = array_reduce($array, function ($carry, $item) {
$carry[$item['id']][] = $item;
return $carry;
}, []);
// 对缩减后的值进行处理,将相同值的数组合并在一起
$newArray = array_map(function ($group) {
// 合并数组
$merged = array_merge(...$group);
// 去重
return array_unique($merged, SORT_REGULAR);
}, $reduced);
// 返回新的数组
print_r($newArray);
此代码片段将输出以下结果:
Array
(
[1] => Array
(
[0] => Array
(
[id] => 1
[name] => foo
)
[2] => Array
(
[id] => 1
[name] => baz
)
)
[2] => Array
(
[0] => Array
(
[id] => 2
[name] => bar
)
)
)
array_column 函数可以用于从多维数组中获取单个列,并将其作为新的一维数组返回。 可以使用此函数将具有相同值的数组合并在一起,如下所示:
以下是示例代码:
// 原始数组
$array = [
['id' => 1, 'name' => 'foo'],
['id' => 2, 'name' => 'bar'],
['id' => 1, 'name' => 'baz'],
];
// 使用 array_column 函数将 ID 列提取出来并去重
$ids = array_unique(array_column($array, 'id'));
// 创建一个新的数组
$newArray = [];
// 循环遍历去重后的 ID 列
foreach ($ids as $id) {
// 使用 array_filter 函数过滤出与当前 ID 对应的数组,并将它们合并在一起
$group = array_reduce(array_filter($array, function ($item) use ($id) {
return $item['id'] == $id;
}), function ($carry, $item) {
return array_merge($carry, $item);
}, []);
// 将合并后的数组存储到新的数组中
$newArray[] = $group;
}
// 返回新的数组
print_r($newArray);
此代码片段将输出以下结果:
Array
(
[0] => Array
(
[id] => 1
[name] => foo
[2] => Array
(
[id] => 1
[name] => baz
)
)
[1] => Array
(
[id] => 2
[name] => bar
)
)
以上是在 PHP 中合并具有相同值的数组的几种方法,可以根据自己的需要选择最适合的方法。