我有这种阵列:
$a = array(
'one' => 'one',
'0' => '0',
'two' => 'two',
'three' => 'three',
'four'
);
你可以看到它是一个关联数组但是并非所有的键都有值(看看最后一个)。 我的问题是,我如何循环这种数组来获取密钥(如果存在)和相应的值?
谢谢!
答案 0 :(得分:7)
示例中的字符串'four'
不是键,而是值。相应的密钥为1
。这是因为PHP将字符串键'0'
转换为数字键0
,而值'four'
则使用下一个数字键1
。
键可以是整数或字符串。如果一把钥匙是标准 表示整数,它将被解释为这样(即“8” 将被解释为8,而“08”将被解释为“08”)
要拥有一个没有价值的密钥,您可以使用NULL
作为值:
'four' => null
与空键一样使用null
作为键:
null => 'four'
要遍历这样的数组,您可以使用foreach
循环。要检测键/值是否为空,可以使用isset函数。
答案 1 :(得分: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"
}
答案 2 :(得分:0)
您可以使用foreach
构造:
foreach($a as $key=>$val){
// $key is a current key
// $val is tha current value associated
}
答案 3 :(得分:0)
键可以是整数或字符串。如果一个键是整数的标准表示,它将被解释为这样(即“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
测试密钥。