Как мне заставить вложенные php-массивы работать в атрибутах html?

#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 примерно так же аппетитна, как туалет на автобусной остановке: совсем нет.