#php #html #arrays #nested
#php #HTML #массивы #вложенные
Вопрос:
Я пытаюсь использовать вложенный php-массив, полученный из базы данных в цикле, для создания набора html-элементов.
Ниже приведен очищенный раздел этого кода, который все еще содержит странную ошибку: не вложенные массивы можно использовать правильно, как в приведенном ниже коде:
<?php
$array = array();
$array[] = "a";
$array[] = "b";
$array[] = "c";
$x = 1;
echo "<input type='radio' value=" $array[$x] " id='$x'> <label for=" $array[$x] ">" . $array[$x] . "</label><br>";
?>
Но не тогда, когда массив вложен, как здесь:
<?php
$subarray = array();
$subarray[] = "a";
$subarray[] = "b";
$subarray[] = "c";
$array = array();
$array[] = $subarray;
$subarray[] = "p";
$subarray[] = "q";
$subarray[] = "r";
$array[] = $subarray;
$x = 1;
echo "<input type='radio' value=" $array[$x][$] " id='$x'> <label for=" $array[$x][1] ">" . $array[$x][1] . "</label><br>";
?>
По какой-то странной причине «$array [$x] [$x]» и «$array [$x] [1]» работают только за пределами «<>»-тегов и приводят к «b», хранящемуся в массиве в [1] [1] . Но в тегах «<>» они отображаются только как «Array [1]» в инспекторе. «$ x» отлично работает в тегах «<>».
Что я могу сделать, чтобы это работало?
Спасибо!
Ответ №1:
Анализатор PHP не «жадный» для массивов:
$foo = array();
$foo[1] = array();
$foo[1][2] = 'bar';
echo "$foo"; // Output: Array
echo "$foo[1]" // Output: Array
echo "$foo[1][2]"; // Output: Array[2]
Для 2-го и последующих «измерений» массива вы должны использовать {}
расширенный синтаксис:
echo "{$foo[1][2]}"; // Output: bar
Обратите внимание, что при использовании {}
нотации строковые ключи ДОЛЖНЫ быть заключены в кавычки:
echo "$foo[bar]"; // ok
echo "$foo['bar']"; // causes warning
echo "{$foo['bar']}"; // ok
echo "{$foo[bar]}"; // undefined constant warning
Комментарии:
1. Ну, разве это не чудесно! Спасибо! Но зачем это делать?
2. потому что внутренняя согласованность разработки PHP примерно так же аппетитна, как туалет на автобусной остановке: совсем нет.