如何在多维数组中获取键的子键?

时间:2016-05-06 07:52:02

标签: php arrays

array(
   'World'=>array(
            'Asia'=>array(
               'Japan'=>array(
                    'City'=>'Tokyo'
               )
          )
     )
);

在我的数组中,我正在寻找一个密钥:

foreach ($array as $key => $item) {
   if(is_array($item)){
      if (stripos($key, "Japan") !== false){
         echo $key;
      }
   }
}

结果为Japan

对于每个键,我想检查子键是否为“City”。所以我做了以下事情:

   foreach ($array as $key => $item) {
       if(is_array($item)){
          if (stripos($key, "Japan") !== false){
             echo $key;
             foreach ($key as $k => $i) {
                if (stripos($k, "City") !== false){
                   echo "true";
               } else {
                   echo "false";
              }
          }
       }
    }

我希望结果Japan true或至少结果Japan false但结果仍然只是Japan我不明白。

1 个答案:

答案 0 :(得分:1)

在你的第二个foreach中你使用一个元素($key),而你应该使用一组元素($array[$key],考虑它是一个多维数组)。

foreach ($array as $key => $item) {
       if(is_array($item)){
          if (stripos($key, "Japan") !== false){
             echo $key;
             foreach ($array[$key] as $k => $i) {
                if (stripos($k, "City") !== false){
                   echo "true";
               } else {
                   echo "false";
              }
          }
       }
    }

我会使用递归算法来解决问题:

function find_array_children_key($array, $children_key, $parent_key=''){
    $returning_value = false;
    if(is_array($array))
    {
        foreach($array as $key=>$value)
        {
            if($key===$children_key)
                $returning_value = $parent_key;
            else
                $returning_value = find_array_children_key($array,$children_key,$key);

            if($returning_value!==false)
                break;
        }
    }

    return $returning_value;
} 

您要拨打的电话,例如find_array_children_key($array,'City')