2012-03-23 3 views
1

У меня есть несколько одномерный массив, как:PHP - Получить значение по ключу в Многомерном массиве

$fields = 
    Array (
     [1] => Array 
      (
       [field_special_features5_value] => Special Function 5 
      ) 

     [2] => Array 
      (
       [field_special_features6_value] => Special Function 6 
      ) 

     [3] => Array 
      (
       [field_opticalzoom_value] => Optical Zoom 
      ) 
    ) 

Я хочу, чтобы получить значение по ключу, я попытался код ниже, но не работает

$tmp = array_search('field_special_features5_value' , $fields); 
echo $tmp; 

Как я могу получить значение Special Function 5 ключа field_special_features5_value?

Благодаря

ответ

3

print $fields[1]['field_special_features5_value'];

или если вы не знаете, в какой индекс Ваш массив, что-то вроде этого:

function GetKey($key, $search) 
{ 
    foreach ($search as $array) 
    { 
     if (array_key_exists($key, $array)) 
     { 
      return $array[$key]; 
     } 
    } 

    return false; 
} 

$tmp = GetKey('field_special_features5_value' , $fields); 
echo $tmp; 
0

Ваша проблема в том, что у вас есть индекс верхнего уровня сначала, прежде чем вы сможете искать массив. Таким образом, для доступа к этому значению, что нужно сделать это:

$tmp = $fields[1]['field_special_features5_value']; 
1

Если вы знаете, где он находится в $fields массиве, попробуйте:

$value = $fields[1]['field_special_features5_value']; 

Если нет, попробуйте:

function getSubkey($key,$inArray) 
{ 
    for ($fields as $field) 
    { 
     $keys = array_keys($field); 
     if (isset($keys[$key])) return $keys[$key]; 
    } 

    return NULL; 
} 

И использовать его следующим образом:

<?php 
    $value = getSubkey("field_special_features5_value",$fields); 
?> 
0

Вы можете сделать это с рекурсивной функцией как этот

<?php 

function multi_array_key_exists($needle, $haystack) { 
     foreach ($haystack as $key=>$value) { 
     if ($needle===$key) { 
      return $key; 
     } 
     if (is_array($value)) { 
      if(multi_array_key_exists($needle, $value)) { 
      return multi_array_key_exists($needle, $value); 
      } 
     } 
     } 
    return false; 
} 
?> 
+1

Ну, это может работать ... но почему использование рекурсии, когда на самом деле исходное сообщение означает, что OP знает, что массив НЕ представляет собой древовидную структуру с неизвестным числом «ветвей», но двухмерную ...? –

+0

, потому что это более гибкий брат !!!! – Harry

1

Вы должны искать рекурсивный:

function array_search_recursive(array $array, $key) { 
    foreach ($array as $k => $v) { 
     if (is_array($v)) { 
      if($found = array_search_recursive($v, $key)){ 
       return $found; 
      } 
     } elseif ($k == $key) { 
      return $v; 
     } else { 
      return false; 
     } 
    } 
} 

$result = array_search_recursive($fields, 'field_special_features5_value'); 
Смежные вопросы