我有這類型的數組:如何從不完整的關聯數組中獲取鍵/值?
$a = array(
'one' => 'one',
'0' => '0',
'two' => 'two',
'three' => 'three',
'four'
);
,你可以看到它是一個關聯數組,但不是所有的鍵有值(看看最後一個)。 我的問題是,我如何循環這種數組來獲得密鑰(如果存在)和相應的值?
謝謝!
我有這類型的數組:如何從不完整的關聯數組中獲取鍵/值?
$a = array(
'one' => 'one',
'0' => '0',
'two' => 'two',
'three' => 'three',
'four'
);
,你可以看到它是一個關聯數組,但不是所有的鍵有值(看看最後一個)。 我的問題是,我如何循環這種數組來獲得密鑰(如果存在)和相應的值?
謝謝!
您示例中的字符串'four'
不是關鍵,而是值。相應的密鑰將是1
。發生這種情況是因爲PHP將字符串鍵'0'
轉換爲數字鍵0
,並且對於值'four'
,它使用下一個數字鍵1
。
甲鍵可以是一個整數或字符串。如果一個密鑰是一個整數的標準 表示,但是將被解釋爲這樣的(即,「8」 將被解釋爲8,而「08」將被解釋爲「08」)
爲了有沒有價值的關鍵,您可以使用NULL
的值:
'four' => null
同樣有一個空鍵使用null
關鍵:
null => 'four'
而且要遍歷這樣一個數組,你可以使用一個foreach
循環。要檢測鍵/值是否爲空,可以使用isset函數。
好的,但如何理解一個鍵是否設置?如果它返回1我不明白,如果該鍵是真的或不...我該怎麼辦? – Dail
可以使用foreach
建設:
foreach($a as $key=>$val){
// $key is a current key
// $val is tha current value associated
}
隨着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"
}
描述一個關鍵的可以是一個整數或字符串。如果一個鍵是一個整數的標準表示,它將被解釋爲這樣(即「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
測試密鑰。
array_keys()輸出什麼? – Teson
以下(奇怪)結果:one,0,two,three,1 – Dail
codaddict在他的回答中解釋了爲什麼你會得到這個結果。 – scessor