【发布时间】:2021-02-05 15:39:07
【问题描述】:
我有一个这样的多维数组,我需要合并具有相同 messageID 值的子数组。
$myarray = Array (
[0] => Array
(
[messageId] => 5ACE9D8841
[sender] => john@doe.com
)
[1] => Array
(
[messageId] => 7EE67D8170
[sender] => dan@doe.com
)
[2] => Array
(
[messageId] => 8095FD8836
[sender] => cat@doe.com
)
[3] => Array
(
[messageId] => 7EE67D8170
[dest] => mitch@doe.com
[status] => sent
[date] => 2021-02-01 11:06:55
)
);
预期结果,[1] 和 [3] 合并为 [1],因为它们共享相同的 [messageId]:
Array
(
[0] => Array
(
[messageId] => 5ACE9D8841
[sender] => john@doe.com
)
[1] => Array
(
[messageId] => 7EE67D8170
[dest] => mitch@doe.com
[status] => sent
[date] => 2021-02-01 11:06:55
[sender] => dan@doe.com
)
[2] => Array
(
[messageId] => 8095FD8836
[sender] => cat@doe.com
)
)
我不介意键索引或顺序。
编辑:我尝试过 array_merge、array_merge_recursive 和许多其他方法。获得了最佳结果
foreach ($myarray as $sub_arr) {
$result_arr = array_merge($result_arr, $sub_arr);
$result_arr = array_unique($result_arr);
}
它可以工作,但只返回最后一次迭代:
Array
(
[messageId] => 7EE67D8170
[dest] => mitch@doe.com
[status] => sent
[date] => 2021-02-01 11:06:55
[sender] => dan@doe.com
)
问候
【问题讨论】:
-
到目前为止你有什么尝试?
-
欢迎来到 Stack Overflow。虽然我们很乐意在您遇到困难时提供帮助,但您仍然需要为找到解决方案做出自己的努力。这是迭代一个数组以创建一个新数组的简单任务。如果您已经尝试过某事,请编辑您的问题以展示您的最佳尝试,并说明它在哪里以及如何未能满足您的需求。
-
@El_Vanja Ty,我已经编辑了我的帖子。
-
@FelippeDuarte 我已经编辑了我的帖子,我自己尝试了一整天。
-
你的问题的核心是你试图在每次迭代中无条件地合并。您应该仅在满足特定条件(ID 匹配)时才合并。否则,您需要做的就是将元素原样添加到结果数组中。您可以使用消息 id 作为结果数组中的键,因此很容易识别该消息 id 是否已经存在于结果中并且应该合并。
标签: php arrays multidimensional-array array-merge