2016-05-06 2 views
1
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.

Для каждого ключа я хочу проверить, является ли дочерний ключ «городом». Так что я сделал следующее:

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

Я ожидаю, что результат Japantrue или по крайней мере результат Japanfalse, но результат все равно только Japan я не понимаю.

+0

В коде есть ошибки синтаксиса - 'stripos ($ key, 'Japan'! == false'. Пожалуйста, исправьте. –

+0

Я очень смущен тем, что вы на самом деле пытаетесь сделать. Кроме того,' if (stripos ($ key, «Japan») ! == false) {'использует строку в качестве стога сена. – DevDonkey

+0

@u_mulder Спасибо, исправлено! – Jarla

ответ

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

+0

great ! Это работает! Почему мне действительно нужен '$ array [$ key]' вместо '$ key' – Jarla

+1

Большое спасибо! – Jarla

+1

$ key - это только ключ, значение может быть как в Азии, так и в Японии или в городе, но $ array [$ key] - это значение, которое может быть в то же время суб-массивом, тогда ваш второй foreach будет проходить через него – vivoconunxino

Смежные вопросы