我有这样一个数组:
$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函数。
使用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"
}
您可以使用foreach
结构:
foreach($a as $key=>$val){
// $key is a current key
// $val is tha current value associated
}
如PHP中所述:数组
键可以是整数也可以是字符串。如果一个键是一个整数的标准表示,它将被解释为(即:"8"将被解释为8,"08"将被解释为"08")。key中的浮点数被截断为整数。在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
测试键。