2010-06-29 90 views
1

我希望通過指數像這樣訪問assocative數組項通過索引

$arr = Array(
    ['mgm19'] => Array(
     ['override'] => 1 
    ) 
); 

$override1 = $arr['mgm19']['override']; 
$override2 = $arr[0]['override']; 

訪問關聯數組的信息,但我從override2爲什麼得到什麼?

回答

4

因爲$arr只有一個索引mgm19。沒有什麼與索引0相關聯。如果你不知道該指數或不想使用它,使用foreach

foreach($arr as $value) { 
    echo $value['override']; 
    break; /* breaking so that we only read the first value of the array */ 
    } 
+0

http://php.net/manual/en/language.types.array.php 「的索引和關聯數組類型在PHP相同的類型,它可以同時包含整數和字符串索引」。 我可能是錯的,但這並不意味着它應該已經包含一個數字索引? – 2010-06-29 14:42:41

+0

好吧,那麼我如何重寫,如果不mgm19是動態的,我不知道它會是什麼? – mcgrailm 2010-06-29 14:43:46

+0

@DavidYell:不,它表示索引可以是0,可以是'mgm19'。這裏唯一的指標是'mgm19'。 @mcgrailm:看到我已完成的答案 – Alsciende 2010-06-29 14:45:21

2

php.net/manual/en/language.types.array.php「索引和關聯數組類型在PHP中是相同的類型,它們都可以包含整數和字符串索引。」我可能是錯的,但這並不意味着它應該已經包含一個數字索引?

不,它是說你可以同時使用數字和字符串標記,而不是你可以使用一個或另一個訪問它們。記住一個關鍵是獨一無二的價值標識,如果你允許使用數量或使用數組中的數字位置,你不能訪問它們的字符串,採取下列數組:

$arr = Array(
    [mgm19] => Array(
    [override] => 1 
    ), 
    [0] => Array(
    [override] => 1 
    ) 
); 

我們是可以將混合數據類型作爲關鍵字,並且您無法訪問[mgm19]作爲[0]的原因是因爲這不是它的關鍵。

我希望這是有道理的:P

+0

是的,它的確如此!我也是這麼想的,但是當我閱讀手冊時並不確定! – 2010-06-29 15:01:45

0

無法使用數組中的數字位置訪問關聯數組。

從技術上講,PHP中的所有數組都是相同的。數組中的每個位置都用數字值或字符串定義,但不是兩者都定義。

如果要檢索數組中的特定元素,但不能使用已定義的關聯索引,然後使用currentprevnextreset,並end功能。

2
$arr = Array( 
    ['mgm19'] => Array( 
     ['override'] => 1 
    ) 
); 

$override1 = $arr['mgm19']['override']; 
$arrkeys = array_keys($arr); 
$override2 = $arr[$arrkeys[0]]['override']; 
+0

我更喜歡這個解決方案 – mcgrailm 2010-06-29 15:22:58