我有一个由许多其他数组组成的数组,这些数组也可能包含其他数组。它基本上像导航层次结构,一个菜单链接可以是带子菜单的菜单等等。
$mainarray
的结构如下:
'childarray1' => array(
'link' => array(
..
'mykey' => 'valueofinterest'
),
'below' => array() of childarrays
),
'childarray2' => array(
'link' => array(
..
'mykey' => 'somevalue'
)
),
'childarray3' => array(
'link' => array(
..
'mykey' => 'someothervalue'
),
'below' => array() of childarrays
)
每个childarray
可以包含2个直接子keys
,'links'
和'below'
。在links
内,始终有key 'mykey'
,这是我需要检查的唯一密钥。如果子数组包含['links']['mykey'] == 'valueofinterest'
,我希望此元素返回,例如$sub = $mainarray['child1']['below']['child11']['below']['childofinterest']
。
'below'
表示子阵列本身有子节点,也可以在数组下面(子菜单..)。
我的hude问题是我试图找到的子阵列可以是任何其他子阵列''below'
键,我不知道深度(它不是太深,虽然它可以变化)。我试图弄乱foreach循环和while循环并将它们组合起来,我只是想弄清楚如何获取子数组。我想这样做:
$value = 'xxx';
$sub = return_sub_menu($value);
function return_sub_menu($value) {
$array = $mainarray();
$sub = array();
// find the child array which's ['link']['mykey'] == $value;
// $sub is now something like:
// 'childarray321' => array(
// 'link' => array(
// ..
// 'mykey' => 'xxx'
// ),
// 'below' => array() of childarrays which i NEEED :)
//
// )
return $sub;
}
我试图递归行走,但无法弄清楚如何返回元素:(
答案 0 :(得分:1)
function recursiveSearch($array, $value){
foreach($array as $sub){
if ($sub['link']['mykey'] == $value)
return $sub ;
if (!empty($sub['below'])){
$returned = recursiveSearch($sub['below'], $value);
if ($returned !== null)
return $returned ;
}
}
return null ;
}
$sub = recursiveSearch($array, "valueofinterest");
//Returns array with ['link']['mykey'] == $value ;
var_dump($sub);
UPDATE V2
修复了该功能,现在可以正常使用
答案 1 :(得分:0)
试试这个,
if (array_key_exists('keyvalue', $array)) {
$subarray = $array['keyvalue'];
return $subarray;
}
它将返回子数组
答案 2 :(得分:0)
在这里。
$finalarray = array_map(create_function('$yourarray', 'return $yourarray["arrayindex"];'), $actualarray );