📅  最后修改于: 2023-12-03 15:33:40.646000             🧑  作者: Mango
在 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
数组,其中包含多个关联数组,每个数组包含 name
和 color
键值对。我们想要合并具有相同名称的数组。
首先,我们创建一个空数组 $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()
函数更简单,但使用循环需要更多代码。
无论您使用哪种方法,都可以以相同的方式处理具有相同值的关联数组。