Массив внутри массива по индексу не работает

0

Кажется, я не могу получить доступ к массиву внутри массива с индексом.

это

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

Я сумасшедший? Что происходит?

  • 0
    Почему это не должно происходить? Внутренний массив является ассоциативным массивом. Он имеет элементы, проиндексированные по ключам date и weight . Он не имеет ничего по индексу 1 .
  • 0
    Что вы ожидаете, что $graphed[0][1] вернется?
Показать ещё 2 комментария
Теги:
arrays

1 ответ

2
Лучший ответ

PHP дает четкое различие между ассоциативными элементами (с ключом) и индексированными элементами (с индексом). Вы не можете получить доступ к элементу с ключом таким образом. Другими словами: они не чередуются. PHP видит массив как состав Array (List) (например, вы знали их на Java) и HashMap. Разница с Java заключается в том, что, кроме того, гарантируется, что ключи будут упорядочены. Но это не означает, что ключи themselve соответствуют индексу. В 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" не существует.

Однако вы можете получить список ключей, который является индексированным массивом, и затем выбрать этот ключ, как написано здесь:

$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)
}
  • 0
    Отличное объяснение и отличный ответ. Я всегда ценю получение обоих. Поставлю галочку, если у меня все получится.
  • 0
    Примечание совета, комментарии на java не относились ко мне, возможно мое предположение заставило это казаться так.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню