0

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

$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不使用循环的情况下构建数组?

谢谢

4

2 回答 2

0

它符合你的目标吗?

<?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
)
于 2021-09-27T15:46:43.910 回答
0

将所有数组合并到一个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
        )

)
于 2021-09-27T15:49:27.893 回答