Почему доступ к элементу массива приводит к ошибке «массив как строка» в PHP?

Я провел поиск и не нашел ни одной записи, которая бы полностью отвечала на мой вопрос.
У меня есть массив PHP, сгенерированный ради аргумента, с помощью этого кода:

$i = 5;
for($i = 0; $i < $j; $i++) {
$multiArray[0][$i] = $i;
$multiArray[1][$i] = $i;
}

Когда я пытаюсь получить к нему доступ с помощью:

for($i = 0; $i < $j; $i++) {
echo "$multiArray[0][$i]";
echo "$multiArray[1][$i]";
}

Я получил:

Примечание: преобразование массива в строку в строке 3

Примечание: преобразование массива в строку в строке 4

…x4

Когда я заменяю echo с printf("%d", $multiArray[0][$i]) тогда он печатает нормально. Почему я должен явно сказать PHP, что я запрашиваю int, когда элемент, к которому я обращаюсь, явно является int (и PHP знает это через var_dump())? Я не получаю доступ к массиву, но элемент в массив.

Спасибо

0

Решение

Простая двойная кавычка поддерживает до один вложенный элемент. Другими словами, "foo[0][1]" интерпретируется как "{$foo[0]}[1]", Это означает, что он пытается интерпретировать массив $foo[0] в качестве строки в этой точке, чтобы интерполировать его в строку.

Но использование здесь кавычек совершенно бессмысленно. Вы не хотите интерполяции строк, вы просто хотите вывести значение переменной:

echo $multiArray[0][$i];
2

Другие решения

просто попробуйте это:

for($i = 0; $i < $j; $i++) {
echo $multiArray[0][$i];
echo $multiArray[1][$i];
}
0

Ваш код разбирает строку, а не массив, попробуйте удалить кавычки. Квадратные скобки [] после массива рассматриваются как строка, а не как параметр. Используйте приведенный ниже код.

<?php
$j = 5;
for($i = 0; $i < $j; $i++) {
$multiArray[0][$i] = $i;
$multiArray[1][$i] = $i;
}

for($i = 0; $i < $j; $i++) {

echo $multiArray[1][$i];
}

Надеюсь, это поможет вам

0
По вопросам рекламы [email protected]