2011-11-04 61 views
2

我有這類型的數組:如何從不完整的關聯數組中獲取鍵/值?

$a = array(
    'one' => 'one', 
    '0' => '0', 
    'two' => 'two', 
    'three' => 'three', 
    'four'    
    ); 

,你可以看到它是一個關聯數組,但不是所有的鍵有值(看看最後一個)。 我的問題是,我如何循環這種數組來獲得密鑰(如果存在)和相應的值?

謝謝!

+0

array_keys()輸出什麼? – Teson

+0

以下(奇怪)結果:one,0,two,three,1 – Dail

+0

codaddict在他的回答中解釋了爲什麼你會得到這個結果。 – scessor

回答

7

您示例中的字符串'four'不是關鍵,而是值。相應的密鑰將是1。發生這種情況是因爲PHP將字符串鍵'0'轉換爲數字鍵0,並且對於值'four',它使用下一個數字鍵1

Reference

甲鍵可以是一個整數或字符串。如果一個密鑰是一個整數的標準 表示,但是將被解釋爲這樣的(即,「8」 將被解釋爲8,而「08」將被解釋爲「08」)

爲了有沒有價值的關鍵,您可以使用NULL的值:

'four' => null 

同樣有一個空鍵使用null關鍵:

null => 'four' 

而且要遍歷這樣一個數組,你可以使用一個foreach循環。要檢測鍵/值是否爲空,可以使用isset函數。

+0

好的,但如何理解一個鍵是否設置?如果它返回1我不明白,如果該鍵是真的或不...我該怎麼辦? – Dail

0

可以使用foreach建設:

foreach($a as $key=>$val){ 
    // $key is a current key 
    // $val is tha current value associated 
} 
1

隨着var_dump($a);你看到所有的鍵和值:

array(5) { 
    ["one"] => string(3) "one" 
    [0]  => string(1) "0" 
    ["two"] => string(3) "two" 
    ["three"] => string(5) "three" 
    [1]  => string(4) "four" 
} 
+0

請看看我給codaddict的評論 – Dail

+0

每個值都是數組中的一個鍵。在你的例子中,你可以在'for'循環中檢查你的密鑰是否是一個帶有[is_string($ key)](http://de.php.net/is_string)的字符串。 – scessor

+0

我不能因爲我也有0,它是一個數字,所以我不能檢查是否有一個字符串或不,因爲也許某些鍵應爲數字爲真。 – Dail

0

正如PHP: Arrays

描述一個關鍵的可以是一個整數或字符串。如果一個鍵是一個整數的標準表示,它將被解釋爲這樣(即「8」將被解釋爲8,而「08」將被解釋爲「08」)。浮點鍵被截斷爲整數。索引和關聯數組類型在PHP中是相同的類型,它們都可以包含整數和字符串索引。

所以你不能分辨鍵「0」,0和你的最後一個元素是不是關鍵,它是自動增量整數數值鍵1.您可以用var_dump($a)檢查:

array(5) { 
    ["one"]=> 
    string(3) "one" 
    [0]=> 
    string(1) "0" 
    ["two"]=> 
    string(3) "two" 
    ["three"]=> 
    string(5) "three" 
    [1]=> 
    string(4) "four" 
} 

如果您可以確保您的所有密鑰都不以數字開頭,那麼您可以像平常一樣迭代陣列,然後使用is_int測試密鑰。

相關問題