📜  php 合并具有相同值的数组 - PHP (1)

📅  最后修改于: 2023-12-03 14:45:22.865000             🧑  作者: Mango

PHP 合并具有相同值的数组

在 PHP 中,经常需要将具有相同值的数组合并在一起,以便更方便地处理数据。 下面是一些在 PHP 中合并具有相同值的数组的方法。

使用循环

使用循环是最基本的方法,可以按照以下步骤合并相同值的数组:

  1. 创建一个新的数组,用于存储已合并的数据;
  2. 循环遍历原始数组,判断是否有相同的值;
  3. 如果有相同的值,则将这些值的数组合并在一起,并将结果存储到新的数组中;
  4. 循环结束后,返回新的数组。

以下是示例代码:

// 原始数组
$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 函数

array_reduce 函数是 PHP 中非常有用的函数之一,可以用于将数组元素缩减为单个值。 可以使用此函数将具有相同值的数组合并在一起,如下所示:

  1. 使用 array_reduce 函数将原始数组缩减为一个单独的值;
  2. 对缩减后的值进行处理,将相同值的数组合并在一起;
  3. 返回新的数组。

以下是示例代码:

// 原始数组
$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_column 函数可以用于从多维数组中获取单个列,并将其作为新的一维数组返回。 可以使用此函数将具有相同值的数组合并在一起,如下所示:

  1. 使用 array_column 函数将原始数组中的 ID 列提取出来;
  2. 对 ID 列进行去重;
  3. 循环遍历去重后的 ID 列,使用 array_filter 函数过滤出与当前 ID 对应的数组,并将它们合并在一起;
  4. 返回新的数组。

以下是示例代码:

// 原始数组
$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 中合并具有相同值的数组的几种方法,可以根据自己的需要选择最适合的方法。