2012-03-23 110 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; 

我怎樣才能得到鑰匙field_special_features5_value的價值Special Function 5

感謝

回答

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知道這個數組實際上並不是代表一個樹狀結構,其中有一個未知數的「分支」,而是一個二維的結構......? – 2012-03-23 10:02:36

+0

因爲它更靈活的兄弟! – Harry 2012-03-23 14:56:12

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