我有两个数组,这些数组是从用户定义类似路由计划的表单中获取的。此表单是分开处理并返回以下两个数组。我想结合以下逻辑:
$array1 = Array
(
[0] => Array
(
[route] => 1
[origin] => zurich
[target] => madrid
)
[1] => Array
(
[route] => 2
[origin] => lisbon
[target] => dublin
)
[2] => Array
(
[route] => 3
[origin] => rome
[target] => paris
)
)
$array2 = Array
(
[0] => Array
(
[route] => 2
[checkpoint] => london
)
)
通过“route”键(如果在$ array2中设置)
组合它们$desired = Array
(
[0] => Array
(
[route] => 1
[origin] => zurich
[target] => madrid
)
[1] => Array
(
[route] => 2
[origin] => lisbon
[target] => dublin
[checkpoint] => london
)
[2] => Array
(
[route] => 3
[origin] => rome
[target] => paris
)
)
我尝试了几种不同的数组函数但没有成功。我想我必须手动循环它们,但我不确定如何。
我在Stackoverflow上搜索但找不到类似的问题。但也许是因为我不知道这种操作的技巧。
答案 0 :(得分:1)
您可以先循环array2,然后再循环搜索array1中的相应路由。如果匹配,只需将它们合并:
foreach ($array2 as $value) {
foreach ($array1 as &$value2) {
if($value2['route'] == $value['route']) {
$value2 = array_merge($value2, $value); // just join them
}
}
}
答案 1 :(得分:1)
你可以通过创建一个将routeID映射到数组索引的结构来“恢复”这两个数组:对于这两个数组:你遍历每个数组并构建类似的东西:
$revArr1 = Array
(
'1' => 0,
'2' => 1,
'3' => 2
)
和
$revArr2 = Array
(
'2' => 0
)
然后,您迭代$revArr1
的密钥,并为每个密钥检查$revArr2
中是否有相应的密钥。
如果是,您就可以获取$array2[$correspondingIndex]
,这是与您要在$array1
中丰富的路线相对应的子阵列。
它需要您完成$array1
的2次完整迭代和$array2
的1次完整迭代。
另外,如果$array2
中的重新路线没有出现在$array1
中,则会有额外的循环。
可能有更高效的算法来做到这一点。请尝试查看array_filter
或array_map
。
答案 2 :(得分:1)
嵌套数组需要双循环:
foreach($array1 as $key => $value){
foreach( $array2 as $checkpoint){
if( $checkpoint['route'] === $array1[$key]['route'] ){
$array1[$key]['checkpoint'] = $checkpoint['checkpoint'];
}
}
}