📜  php中的关联数组具有相同的值加入它们 - PHP(1)

📅  最后修改于: 2023-12-03 15:33:40.646000             🧑  作者: Mango

PHP中的关联数组具有相同的值加入它们

在 PHP 中,关联数组是一种特殊的数组,它使用字符串键而不是数字键来访问元素。如果多个关联数组具有相同的值,您可能想要将它们合并在一起来进行处理。在本指南中,我们将介绍如何使用 PHP 来将具有相同值的关联数组合并在一起。

方法一:使用循环

可以使用循环遍历数组并将具有相同值的元素合并在一起。这需要一些额外的工作,但是它完全可以实现:

$fruits = array(
    array('name' => 'apple', 'color' => 'red'),
    array('name' => 'banana', 'color' => 'yellow'),
    array('name' => 'orange', 'color' => 'orange'),
    array('name' => 'apple', 'color' => 'green'),
    array('name' => 'pear', 'color' => 'green'),
    array('name' => 'banana', 'color' => 'brown')
);

$mergedFruits = array();

foreach ($fruits as $fruit) {
    $name = $fruit['name'];
    $color = $fruit['color'];
    
    if (!isset($mergedFruits[$name])) {
        $mergedFruits[$name] = array();
    }
    
    $mergedFruits[$name][$color] = true;
}

foreach ($mergedFruits as &$value) {
    $value = array_keys($value);
}

print_r($mergedFruits);
说明

在上面的示例中,我们有一个 $fruits 数组,其中包含多个关联数组,每个数组包含 namecolor 键值对。我们想要合并具有相同名称的数组。

首先,我们创建一个空数组 $mergedFruits,用于保存合并后的结果。

然后,我们遍历每个水果。如果 $mergedFruits 中没有与当前名称匹配的数组,则创建一个新的空数组。然后,我们将颜色键添加到该数组中。请注意,我们使用 $mergedFruits[$name][$color] = true; 而不是 $mergedFruits[$name][] = $color;。这是因为 $mergedFruits[$name] 可能还不存在。通过使用 $mergedFruits[$name][$color] = true;,我们确保在添加颜色之前始终存在一个嵌套数组。

最后,我们使用 array_keys() 函数将每个嵌套数组中的值转换为数组。这将返回一个仅包含唯一元素的新数组。我们还使用 foreach ($mergedFruits as &$value) 循环来修改 $mergedFruits 中的每个元素,以使用新的数组替换原始嵌套数组。

运行此代码将生成以下输出:

Array
(
    [apple] => Array
        (
            [0] => red
            [1] => green
        )

    [banana] => Array
        (
            [0] => yellow
            [1] => brown
        )

    [orange] => Array
        (
            [0] => orange
        )

    [pear] => Array
        (
            [0] => green
        )

)

这是一个按名称合并的数组。对于每个名称,我们得到一个新的子数组,其中包含唯一的颜色。

方法二:使用 array_reduce()

除了循环之外,PHP 还提供了另一种更简单的方法来合并具有相同值的关联数组,即使用 array_reduce() 函数。这是一个更简单的解决方法,代码如下:

$mergedFruits = array_reduce($fruits, function($carry, $item) {
    $name = $item['name'];
    $color = $item['color'];
    $carry[$name][$color] = true;
    return $carry;
}, array());

foreach ($mergedFruits as &$value) {
    $value = array_keys($value);
}

print_r($mergedFruits);
说明

在这个示例中,我们调用 array_reduce() 函数来遍历 $fruits 数组,并将每个元素合并到 $mergedFruits 中。我们在 array_reduce() 函数的回调中定义了 $carry 参数,它包含已经合并进来的关联数组。

如同循环的范例,我们创建 $name$color 变量,在 $carry 的嵌套数组中将它们添加。使用 true 作为值是无关紧要的,只在意键是否存在。

最后,我们使用 array_keys() 函数将每个嵌套数组中的值转换为数组。这将返回一个仅包含唯一元素的新数组。我们还使用 foreach ($mergedFruits as &$value) 循环来修改 $mergedFruits 中的每个元素,以使用新的数组替换原始嵌套数组。

运行此代码将生成以下输出:

Array
(
    [apple] => Array
        (
            [0] => red
            [1] => green
        )

    [banana] => Array
        (
            [0] => yellow
            [1] => brown
        )

    [orange] => Array
        (
            [0] => orange
        )

    [pear] => Array
        (
            [0] => green
        )

)

这是一个按名称合并的数组。对于每个名称,我们得到一个新的子数组,其中包含唯一的颜色。

结论

在 PHP 中,将具有相同值的关联数组合并在一起既可以使用循环也可以使用 array_reduce()array_reduce() 函数更简单,但使用循环需要更多代码。

无论您使用哪种方法,都可以以相同的方式处理具有相同值的关联数组。