2017-07-25 30 views
0

使用這個作爲一個例子和意識到的key如何通過搜索偏移值來獲得關聯數組的鍵?

$arr = array(
    'product1'=>array('color'=>'blue','size'=>'medium'), 
    'product2'=>array('color'=>'green','size'=>'large'), 
    'product3'=>array('color'=>'yellow','size'=>'small'), 
); 

是否有通過其增加後的值獲得在多維數組任何密鑰的方法?

例如,我想獲得上面的$arr中的第三個數組值的關鍵。 $arr[2]會返回值(一個數組包含黃色/小)。

有沒有辦法利用key函數通過數字迭代器獲取任何鍵,而不是「當前位置」的鍵?

或者,是否有另一個內置函數,我明顯忽略了這將返回鍵$arr[2],而不是它的價值?

echo getkey($arr[2]); 

# returns product3 
+0

你想嘗試array_map來實現你的解決方案 – Gunnrryy

+0

你選擇的答案編碼器,沒有在哪裏檢查基於給定數字的任何鍵是否存在。所以它會在多種情況下給出未定義的索引錯誤。 –

+0

對於剛纔低估了這個問題的人:如果你打算至少發表評論來解釋你的行爲。不要打併跑步。 –

回答

3

只需使用array_keys功能:

$arr = array(
      'product1'=>array('color'=>'blue','size'=>'medium'), 
      'product2'=>array('color'=>'green','size'=>'large'), 
      'product3'=>array('color'=>'yellow','size'=>'small'), 
     ); 

$keys = array_keys($arr); 

echo $keys[2]; 

// shorter version 
echo array_keys($arr)[2]; 

更多的相關信息:http://php.net/manual/en/function.array-keys.php

+0

這個答案否根據給定的數字檢查是否存在任何密鑰。所以它會在多種情況下給出未定義的索引錯誤。 –

1

可以使用array_keys()功能:

function getKey($arr, $i) { 
    if (empty($arr[array_keys($arr)[$i]])) { 
     return null; 
    } 

    // array_keys($arr)[$i] returns original array's key at i position 
    // if i = 2, array_keys($arr)[$i] = 'product3' 
    return array_keys($arr)[$i]; 
} 

// echo getKey($arr, 2); 
// returns product3 
+0

@mickmackusa你是對的!完成。 – micster

2

這似乎不符合邏輯/高效生成一個新的/完整的鍵陣列只是爲了從中選擇一個。其他答案是「努力工作」。

array_slice()根據位置而不是按鍵名稱特別提取數組的部分。這使它成爲這種情況下的完美功能。

更好的做法是隻切走你想要的子數組,然後調用它的關鍵,是這樣的:

代碼:(Demo

$arr = array(
      'product1'=>array('color'=>'blue','size'=>'medium'), 
      'product2'=>array('color'=>'green','size'=>'large'), 
      'product3'=>array('color'=>'yellow','size'=>'small'), 
     ); 
$key=2; 
echo key(array_slice($arr,$key,1)); // [input],[0-indexed position],[number of subarrays] 

輸出:

product3