1

我有一个由许多其他数组组成的数组,它也可能由其他数组组成。它基本上就像一个导航层次结构,一个菜单链接可以是一个带有子菜单的菜单等等。

的结构$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'表示子数组本身有子数组,子数组本身也可以有下面的数组(子菜单..)。

我最大的问题是我试图找到的子数组可以在任何其他子数组的'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;
}

我试图递归地走,但不知道如何返回元素:(

4

3 回答 3

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);

更新 V2

修复了该功能,因此现在可以使用

于 2013-10-01T09:24:16.493 回答
0

像这样试试

if (array_key_exists('keyvalue', $array)) {
    $subarray = $array['keyvalue'];
    return $subarray;
}

它将返回子数组

于 2013-10-01T09:26:10.767 回答
0

这里是。

$finalarray = array_map(create_function('$yourarray', 'return $yourarray["arrayindex"];'), $actualarray );
于 2013-10-01T09:33:54.077 回答