我在基于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”合并而不是其他任何东西。然后对用户进行另一次合并,这样如果另一个索引有不同的用户,他们都会合并。
答案 0 :(得分:0)
听起来您想获得每个应用的用户列表。我想你将不得不循环使用它们。您可以创建一个由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将用第二个数据覆盖第一个数组中的值,我不相信你想要的行为。
答案 1 :(得分:0)
@Andrew,您是否尝试使用array_merge_recursive()
?
答案 2 :(得分:0)
终于搞定了。
$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;
}
}
这很邋,,但是它很有效,如果我自己这么说的话,它的效果非常好。尚未对它进行基准测试,但我确实在一个相当重的阵列上测试它,没有明显的延迟。每个索引中的数据都比我显示的要多得多。总而言之,我很满意。
我希望这能帮助其他人。