如何从不完整的关联数组中获取键/值


How to get keys/values from an incomplete associative array?

我有这样一个数组:

   $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测试键。