[英]Multi array_merge
我在合并基于1索引的多维数组时遇到一些困难。 我不知道我的大脑是否呆得太久,弄乱了自己或什么,但是我无法理解。
来自2个数组的2个索引的示例如下:
// Array1:
[0] => Array
(
[appID] => 58510
[name] => SomeRandomApp
[users] => Array
(
[0] => randomUser
)
)
// Array2:
[0] => Array
(
[appID] => 58510
[name] => SomeRandomApp
[users] => Array
(
[0] => anotherUser
)
)
// Desired Result:
[0] => Array
(
[appID] => 58510
[name] => SomeRandomApp
[users] => Array
(
[0] => randomUser
[1] => anotherUser
)
)
我想基于“ appID”进行合并,仅此而已。 然后对用户进行另一个合并,以便如果另一个索引具有不同的用户,则它们都将合并。
听起来您想获取每个应用程序的用户列表。 我认为您将不得不遍历它们。 您可以创建一个由appID索引的结果数组,如下所示(未经测试):
function app_users($array1, $array2) {
$combined = array ();
foreach (array($array1, $array2) as $arr) {
foreach ($arr as $values) {
if (!isset($combined[$values['appId']])) {
$combined[$values['appID']] = $values;
}
else {
$combined[$values['appID']]['users'][] = $values['users'][0];
}
}
}
}
$result = app_users($array1, $array2);
假设不会将同一用户列出两次。 您可以根据需要修改该功能以处理重复项。
附带说明一下,在重复键的情况下,array_merge将用第二个数组覆盖第一个数组中的值,我不认为这是您想要的行为。
@Andrew,您尝试使用array_merge_recursive()
吗?
终于一切都解决了。
$newArray = array();
foreach($data as $item)
{
$appID = $item['appID'];
$users = $item['users'];
unset($item['users']);
unset($item['hoursOnRecord']);
if(!isset($newArray[$appID]))
{
$newArray[$appID] = $item;
foreach($users as $user)
$newArray[$appID]['users'][] = $user;
}
else
{
$users2 = $newArray[$appID]['users'];
$newArray[$appID] = $item;
foreach($users as $user)
$newArray[$appID]['users'][] = $user;
foreach($users2 as $user)
$newArray[$appID]['users'][] = $user;
}
}
这很草率,但是可以用,如果我自己这么说的话,也很好用。 尚未对它进行基准测试,但我确实在相当大的阵列上对其进行了测试,并且没有明显的延迟。 每个索引中的数据比我显示的要多。 总而言之,我很满足。
我希望这会帮助别人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.