簡體   English   中英

如何提取具有給定結構且鍵=> value匹配多維度數組給定值的數組?

[英]How to extract an array that has a given structure and which's key => value matches a given value of an mutlidimensional array?

我有一個由許多其他數組組成的數組,也可能由其他數組組成。 它基本上就像一個導航層次結構,一個菜單鏈接可以是帶有子菜單的菜單,依此類推。

$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;
}

我試圖遞歸走,但不知道如何返回元素:(

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

修復了該功能,因此現在可以使用

這樣嘗試

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

它將返回子數組

這里是。

$finalarray = array_map(create_function('$yourarray', 'return $yourarray["arrayindex"];'), $actualarray );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM