按索引排列的数组内部的数组不起作用


Array inside array by index not working

我似乎无法访问带有索引的数组中的数组。

这个

var_dump($graphed[0]);

把这个给我

array (size=2)
  'date' => string '02-03-15' (length=8)
  'weight' => string '82.327015155' (length=12)

这个

var_dump($graphed[0]['weight']);

给我这个

 string '82.327015155' (length=12)

但是这个

var_dump($graphed[0][1]);

给我这个

A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 1
Filename: progress/compare.php
Line Number: 17
null

我不知道从这里到哪里去。我所知道的关于PHP的一切告诉我这不应该发生。

顺便说一下,这个

echo phpversion();

给我

 5.5.12

我疯了吗?怎么回事?

PHP在关联元素(带键)和索引元素(带索引)之间建立了明确的目的地。您不能以这种方式访问带有键的元素。换句话说:它们不是交错的。PHP将数组视为ArrayList)(就像您在Java中所知道的那样)和HashMap组合。与Java的不同之处在于,还保证了密钥的有序性。但这并不意味着键本身就对应于索引。在HashMap<T>中,两者都不能获得第5个CCD_值。

示例

php > var_dump(array(1,2,3,'foo'=>'bar',7));
array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  ["foo"]=>
  string(3) "bar"
  [3]=>
  int(7)
}

换句话说,"foo"不映射在索引上,索引编号只考虑索引元素。对于索引器,就好像"foo" => "bar"不存在一样。

但是,您可以获得键列表,这是一个索引数组,然后按照此处所写的方式选择该键:

$keys = array_keys($graphed[0]);
echo $graphed[0][$keys[1]];

PHP保证密钥排序,所以这样做是安全的(当然,如果您提前知道顺序,或者知道您在做什么)。

请注意,包括索引:

php > var_dump(array_keys(array(1,2,3,'foo'=>'bar',7)));
array(5) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  string(3) "foo"
  [4]=>
  int(3)
}