我有两个数组,它们是从用户定义种类(如路由计划)的形式中获得的。此表单单独处理并返回以下两个数组。我想结合以下逻辑:
$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
)
)
通过其"路由"键组合它们(如果在 $array 2 中设置)
$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上搜索过,但找不到类似的问题。但也许是因为我不知道这种操作的技术术语。
您可以先循环 array2,然后再次循环以搜索 array1 中的相应路由。如果它们匹配,只需合并它们:
foreach ($array2 as $value) {
foreach ($array1 as &$value2) {
if($value2['route'] == $value['route']) {
$value2 = array_merge($value2, $value); // just join them
}
}
}
你可以"还原"这两个数组,方法是创建一个结构,将routeID映射到数组索引,对于它们来说:你遍历每个数组并构建类似的东西:
$revArr1 = Array
(
'1' => 0,
'2' => 1,
'3' => 2
)
和
$revArr2 = Array
(
'2' => 0
)
然后,您遍历$revArr1
的键,并为每个键检查$revArr2
中是否有相应的键。如果是,则您已准备好获取$array2[$correspondingIndex]
这是与要在$array1
中丰富的路由相对应的子数组。
它需要 2 次完整的 $array1
次迭代和 1 次完整的$array2
迭代。另外,如果您在$array2
中有未出现在$array1
中的剩余路线,则会出现额外的循环。
可能有更有效的算法来做到这一点。尝试查看array_filter
或array_map
。
嵌套数组需要双循环:
foreach($array1 as $key => $value){
foreach( $array2 as $checkpoint){
if( $checkpoint['route'] === $array1[$key]['route'] ){
$array1[$key]['checkpoint'] = $checkpoint['checkpoint'];
}
}
}