【问题标题】:php: combine multiple arrays value into one array preserving keysphp:将多个数组值组合成一个数组保留键
【发布时间】:2021-09-27 15:36:57
【问题描述】:

我有多个结构如下的数组:

$array1 = ["aaa" => 1, "bbb" => 1];
$array2 = ["aaa" => 12, "bbb" => 12];
$array3 = ["bbb" => 15, "ccc" => 15];

意思:

  • 每个数组的每个键都有相同的值(例如:array1 对数组中的每个项都有值“1”)但是没有数组共享相同的值(例如:如果 array1 的值是 1,那么没有其他数组的值 = 1)
  • 数组可能共享也可能不共享相同的键

我需要以某种方式组合这些数组,最终结果是这样的:

$result = [
    "aaa" => [1,12],
    "bbb" => [1,12,15],
    "ccc" => [15],
];

意思:

  • 最终的数组必须包含之前数组中的所有键
  • 键的值是一个数组,由共享同一个键的先前数组的所有值组成

我知道这有点混乱,但我希望它足够清楚。我正在努力构建$result 数组。我尝试了合并、组合、相交,但它们似乎都不起作用。有没有办法在不使用循环的情况下构建$result 数组?

谢谢

【问题讨论】:

  • 有没有办法在不使用循环的情况下构建 $result 数组? 简短的回答是否定的,总会涉及某种“循环”,无论是在显而易见或隐藏(在函数中)。
  • 我认为没有任何内置的合并功能可以做到这一点。循环应该非常简单。
  • foreach ([$array1, $array2, $array3] as $array) { foreach ($array as $key => $value) { ... } } 开头。 ... 将值推送到 $result 的适当元素中。

标签: php arrays array-combine


【解决方案1】:

它符合你的目标吗?

<?php
    $array1 = ["aaa" => 1, "bbb" => 1];
    $array2 = ["aaa" => 12, "bbb" => 12];
    $array3 = ["bbb" => 15, "ccc" => 15];

    $array = array_merge_recursive($array1, $array2, $array3);
    
    print_r($array);
?>

输出

Array
(
    [aaa] => Array
        (
            [0] => 1
            [1] => 12
        )

    [bbb] => Array
        (
            [0] => 1
            [1] => 12
            [2] => 15
        )

    [ccc] => 15
)

【讨论】:

  • 嗨。非常感谢,这在我看来是最好的解决方案。注意:array_merge_recursive 仅适用于字符串键,如果您有数字字符串或 int 作为键,array_merge_recursive 不会保留它们。无论如何,这对我来说不是问题,再次感谢
  • 很高兴阅读它,感谢您的反馈和精确。事实上,不要对任何人重复,但我和你一起发现了这个功能 :D 编码快乐!
【解决方案2】:

将所有数组合并成一个mergedArray。然后使用 2foreach 来设置。

<?php

$array1 = ["aaa" => 1, "bbb" => 1];
$array2 = ["aaa" => 12, "bbb" => 12];
$array3 = ["bbb" => 15, "ccc" => 15];

$mergedArray = [$array1, $array2, $array3];


$result = [];
foreach ($mergedArray as $array) {
    foreach ($array as $key => $item) {
        $result[$key][] = $item;
    }
}

echo '<pre>';
print_r($result);
echo '</pre>';
exit;

?>

结果:

Array
(
    [aaa] => Array
        (
            [0] => 1
            [1] => 12
        )

    [bbb] => Array
        (
            [0] => 1
            [1] => 12
            [2] => 15
        )

    [ccc] => Array
        (
            [0] => 15
        )

)

【讨论】:

    猜你喜欢
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多