给定这样的数组结构:
array:3 [
0 => array:1 [
0 => {#259
+"user_id": 2
}
]
1 => array:2 [
0 => {#254
+"user_id": 1
}
1 => {#252
+"user_id": 1
}
]
2 => array:2 [
0 => {#258
+"user_id": 2
}
1 => {#255
+"user_id": 2
}
]
]
这样的第二个数组:
array:5 [
0 => false
1 => true
2 => true
3 => false
4 => false
]
我想合并这两个数组,所以我得到了这个结果:
array:3 [
0 => array:1 [
0 => {#259
+"user_id": 2
+"is_admin": false
}
]
1 => array:2 [
0 => {#254
+"user_id": 1
+"is_admin": true
}
1 => {#252
+"user_id": 1
+"is_admin": true
}
]
2 => array:2 [
0 => {#258
+"user_id": 2
+"is_admin": false
}
1 => {#255
+"user_id": 2
+"is_admin": false
}
]
]
我不知道如何在第一个数组是嵌套数组时循环,第二个数组作为一个简单的数组给出。我尝试使用array_merge
,但它对我的逻辑没有正常工作。
答案 0 :(得分:1)
我认为你无法实现这一点,因为阵列非常不同。由于它们的大小不同array_merge
无法正常工作。另外,第一个数组是多维的,而第二个数组是单维的。
如果你100%确定数组a和b的索引之间的映射,你可以创建一个循环如下,假设$array1
是多维数组而$ array2是包含{{1的平面数组}和true
:
false
或以更简单的格式:
$index = 0;
$final = array_map(function ($top_level_entry) {
return array_map(function ($item) {
global $index, $array2;
$item['is_admin'] = $array2[$index];
$index++;
return $item;
}, $top_level_entry);
}, $array1);
答案 1 :(得分:1)
您可以使用array_walk_recursive
功能:
array_walk_recursive($users, function (&$user) use (&$is_admin) {
$user->is_admin = current($is_admin);
next($is_admin);
});
注意$user
和$is_admin
都是通过引用传递的。
此外,您可以使用外部索引变量(即$i
)来跟踪$is_admin
位置。在这种情况下,您需要传递(更准确地说是enclose)$i
与$is_admin
一起,只有$i
将通过引用和$is_admin
传递按价值。我决定利用current
和next
函数,而不是再引入一个变量。
这是working demo。
一件重要的事情。如果您的$is_admin
数组的元素数量少于$users
数组(实际上是实际的数量),则false
值将分配给那些用户之后的is_admin
字段。 $is_admin
中没有剩余元素。