2011-05-08 40 views
4

我想知道爲什麼,我有一個查詢字符串頁面上, 代碼:PHP關聯數組中的項不能被數字訪問(即通過索引)嗎?

echo "Item count = " . count($_GET); 
echo "First item = " . $_GET[0]; 

結果:

項目數= 3 第一項=

PHP關聯數組不同於數字數組,所以他們的項目不能被索引訪問?謝謝,

+0

依靠'$ _GET'如何排序通常不是一個好主意。 – BoltClock 2011-05-08 23:47:35

回答

5

他們不能。當你通過鍵/索引爲一個值下標時,它必須完全匹配。

如果您確實想使用數字鍵,您可以在$_GET上使用array_values(),但是您將失去有關鍵的所有信息。您也可以使用array_keys()來獲取帶有數字索引的密鑰。

或者,如Phil提到,你可以用reset()的內部指針來獲取第一個。你也可以用end()得到最後一個。你也可以用array_pop()array_shift()來彈出或移動,兩者都會在數組修改後返回值。

+0

您可以使用['reset()'](http://php.net/manual/en/function.reset.php)獲取關聯數組中的第一個值 – Phil 2011-05-08 23:38:49

+0

@ alex-謝謝,很高興知道 – Yarin 2011-05-08 23:40:35

3

是的,數組元素的鍵是一個整數(不能以0開頭)或一個關聯鍵,而不是兩個。

您可以用這樣的循環訪問項目:

foreach ($_GET as $key => $value) { 
} 

或者獲取值作爲一個數值數組開始鍵0與array_values()功能或reset()獲得的第一個值。

0

不是,這是不可能的。如果你想在0訪問元素,嘗試file.php?0=foobar

<?php 

print_r($_GET); 

?> 

你得到

Array 
(
    [foo] => bar 
) 

試試這個:

file.php?foo=bar

file.php內容。

你也可以使用一個foreachfor環和第一個元素後,簡單地取消(或任何元素你碰巧要達到):

foreach($_GET as $value){ 
    echo($value); 
    break; 
} 
0

都能跟得上 - 它們是由鍵值對映射。您可以遍歷他們KV對添加到索引數組,但:

foreach($_GET as $key => $value) { 
    $getArray[] = $value; 
} 

您可以通過索引$內的getArray現在訪問的值。

2

你可以這樣來做:

$keys = array_keys($_GET); 

echo "First item = " . $_GET[$keys[0]]; 
0

作爲另一個奇怪的解決方法,您可以使用訪問第一個元素:

print $_GET[key($_GET)]; 

這是利用了內部數組指針,如復位/結束/ current()在each()循環中可能會有用。