【问题标题】:Merge two array by key with unique value用唯一值键合并两个数组
【发布时间】:2021-01-05 06:58:29
【问题描述】:

我有两个数组(在 foreach 循环中),它们可能有也可能没有相同的动态生成的键,例如298, 184, 182 如下代码示例所示。

我想合并相同键的值并创建一个数组。

注意:数组是 foreach 循环中的结果。
键是由 id 动态生成的,两个数组中的项可能相同也可能不同。

循环中的结果数组

Array
(
    [298] => Array
        (
            [dates] => Array
                (
                    [0] => 2020-12-26 10:39:13
                    [1] => 2020-12-15 12:18:23
                    [2] => 2020-12-22 12:27:46
                    [3] => 2020-12-24 10:51:00
                    [4] => 2020-12-26 10:01:44
                    [5] => 2020-12-26 10:31:55
                    [6] => 2020-12-26 10:48:33
                    [7] => 2020-12-26 10:56:34
                )

        )

    [184] => Array
        (
            [dates] => Array
                (
                    [0] => 2020-11-16 07:52:33
                    [1] => 2020-12-24 13:01:14
                )

        )

    [182] => Array
        (
            [dates] => Array
                (
                    [0] => 2021-01-05 08:50:27
                )

        )

)
Array
(
    [298] => Array
        (
            [dates] => Array
                (
                    [0] => 2020-11-16 07:38:26
                    [1] => 2020-11-16 07:47:05
                    [2] => 2020-12-15 12:20:07
                    [3] => 2020-12-24 10:52:35
                )

        )

    [184] => Array
        (
            [dates] => Array
                (
                    [0] => 2020-11-16 07:53:12
                )

        )

)

期望单个数组

Array
(
    [298] => Array
        (
            [dates] => Array
                (
                    [0] => 2020-12-26 10:39:13
                    [1] => 2020-12-15 12:18:23
                    [2] => 2020-12-22 12:27:46
                    [3] => 2020-12-24 10:51:00
                    [4] => 2020-12-26 10:01:44
                    [5] => 2020-12-26 10:31:55
                    [6] => 2020-12-26 10:48:33
                    [7] => 2020-12-26 10:56:34
                    [8] => 2020-11-16 07:38:26
                    [9] => 2020-11-16 07:47:05
                    [10] => 2020-12-15 12:20:07
                    [11] => 2020-12-24 10:52:35
                )

        )

    [184] => Array
        (
            [dates] => Array
                (
                    [0] => 2020-11-16 07:52:33
                    [1] => 2020-12-24 13:01:14
                    [2] => 2020-11-16 07:53:12
                )

        )

    [182] => Array
        (
            [dates] => Array
                (
                    [0] => 2021-01-05 08:50:27
                )

        )

)

【问题讨论】:

标签: php arrays


【解决方案1】:

假设第二个数组也可以有第一个数组中没有的键,您可以从两个数组中找到所有唯一键,然后遍历它们,将 array1array2 中的值合并为一个结果数组:

$keys = array_unique(array_merge(array_keys($array1), array_keys($array2)));

$result = array();
foreach ($keys as $key) {
    $result[$key]['dates'] = array_merge($array1[$key]['dates'] ?? [], $array2[$key]['dates'] ?? []);
}
print_r($result);

Demo on 3v4l.org

【讨论】:

  • 非常感谢。你是个天才。我用各种循环尝试了两天,但没有运气。感谢您的帮助。
  • @CodeLover 不用担心 - 我很高兴能提供帮助。
猜你喜欢
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 2018-06-17
  • 2017-08-05
  • 2019-08-05
  • 1970-01-01
相关资源
最近更新 更多