Разбор строк с вложенным массивом в переполнении стека

как вы уже догадались, я новичок в php, поэтому, пожалуйста, потерпите меня.
В данный момент я пишу сценарии на стороне сервера, и в то время как я занимался этим, одна конкретная вещь беспокоит меня в последнее время. Ситуация следующая. У меня есть два массива: один с элементами, а другой с ключами (индексами) для элементов первого массива. Что меня беспокоит, так это когда я пытаюсь вывести элемент через переменные двойного массива в строке:

echo "$elements[$index[0]]";

Я получил «Ошибка разбора: синтаксическая ошибка, неожиданное ‘[‘, ожидаемое ‘]’ в C: \ xampp \ htdocs \ test1.php в строке 5«ошибка. Однако, если используется только один массив, как в:

echo "$elements[0]";

Работает просто отлично (выводит а).

Я искал форумы и нашел небольшую помощь с этим. Также прочитайте В чем разница между одинарными и двойными кавычками в PHP? играл с одинарными и двойными цитатами, но с небольшим успехом.
Обходной путь, который я использую в данный момент, заключается в том, что я сохраняю значение из $index массив в переменную и использовать его в качестве индекса в $elements массив:

$key = $index[0];
echo "$elements[$key]";

Работает нормально, автобус ощущается как уровень косвенности.

Код:

<?php

$elements   = ["a", "b", "c"];
$index  = [2 , 1 , 0];

echo "$elements[$index[0]]";

?>

Ошибка:

Ошибка разбора: синтаксическая ошибка, неожиданный ‘[‘, ожидающий ‘]’ в
C: \ xampp \ htdocs \ test1.php в строке 5

Спасибо всем, кто уделил время, чтобы прочитать и ответить на это.

РЕДАКТИРОВАТЬ:
Спасибо всем за быстрые ответы.
Теперь я вижу, что был слишком наивен, думая, что смогу смоделировать свою конкретную проблему на простом примере.
Фактический код, с которым я имею дело:

mysql_query( "INSERT INTO pics (filename, date) VALUES( $dirArray[$keys[$index]] , $timestamp )" )
or die(mysql_error());

Ошибка:

Parse error: syntax error, unexpected '[', expecting ']' in C:\xampp\htdocs\dbsetup.php on line 47

Ирония также сильна, поскольку я создал уровень косвенности своим вопросом, пытаясь решить уровень косвенности в коде 🙂

0

Решение

Если вы просто выводите переменную, вам не нужно использовать кавычки в PHP:

echo $elements[$index[0]];

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

echo "element at index 0: " . $elements[$index[0]] . "\n";

В зависимости от используемой версии PHP вы также можете столкнуться с ошибкой при использовании [ ... ] как конструктор массива; в PHP 5.3 и более ранних версиях массивы должны быть объявлены с использованием синтаксиса

$fruits = array('apple', 'orange', 'banana');

тогда как в PHP 5.4 и выше, вы можете использовать сокращение

$fruits = ['apple', 'orange', 'banana'];

Существует гораздо больше информации о массивах в Документация по массиву PHP.

3

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

Вам нужно исправить свой PHP-скрипт с помощью этого кода:

$elements   = array("a", "b", "c");
$index  = array(2 , 1 , 0);

echo $elements[$index[0]];
2

Вы не создаете массив, поэтому вы получаете ошибку, а также не печатаете массив должным образом, поэтому измените свой код

$elements   = array("a", "b", "c");
$index  = array(2 , 1 , 0);

echo $elements[0];
echo $index[0];
echo $elements[$index[0]];
0

Вы не должны использовать команду echo в сочетании с переменной массива, если вы используете «» вместо круглых скобок (). Присвойте конструкцию массива временной переменной перед тем, как ее отобразить.

<?php

$elements   = ["a", "b", "c"];
$index  = [2 , 1 , 0];
$value = $elements[$index[0]];

echo "$value";

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