【问题标题】:Array inside array by index not working按索引排列的数组内的数组不起作用
【发布时间】:2015-04-21 14:42:06
【问题描述】:

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

这个

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

我疯了吗?怎么回事?

【问题讨论】:

  • 为什么不应该发生?内部数组是一个关联数组。它具有由键 dateweight 索引的元素。它在索引 1 处没有任何内容。
  • 您希望$graphed[0][1] 会返回什么?
  • 我希望 $graphed[0][1] 返回与 $graphed[0]['weight'] 相同的值,因为 1 是“weight”的索引键。 date 是 index 0, weight 是 index 1。这是我学习并使用了近一年的东西,并且一直有效。如果我忽略了一些简单的东西或者我对索引键的理解是错误的,请纠正我。
  • 您是否一直在使用 mysql_fetch_array() 等函数返回的数组?此函数返回具有数字键和命名键的行。但这不是 PHP 数组的一般特性,它是特定于该函数的。

标签: php arrays


【解决方案1】:

PHP 在关联元素(带有键)和索引元素(带有索引)之间做出了明确的区分。您不能以这种方式使用键访问元素。换句话说:它们没有交错。 PHP 将数组视为Array(List)(就像您在Java 中所知道的那样)和HashMapcomposition。与 Java 的不同之处在于,还保证键是有序的。但这并不意味着键本身对应于索引。在HashMap<T> 中,您都无法获得i-th 值。

示例

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" 不存在一样。

但是,您可以获取键列表(这是一个索引数组),然后按照here 中的说明选择该键:

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

PHP guarantees key ordering 所以这样做是安全的(当然前提是你事先知道订单,或者知道你在做什么)。

请注意,包括索引:

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)
}

【讨论】:

  • 出色的解释和出色的答案。我总是很欣赏两者兼得。如果我成功了,会打勾。
  • 一个建议,java 上的 cmets 不适用于我,也许我的假设使它看起来如此。
  • @Goose:这只是为了防止你不知道HashMaps 是如何工作的并且想要查找它们,你可以在 java 文档中找到该机制。但这可能不是答案的重要部分;)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 2013-04-02
  • 2020-07-12
  • 2023-03-06
  • 2016-07-10
相关资源
最近更新 更多