Не удается создать параметр переменной PHP в теге html

#php #html

#php #HTML

Вопрос:

У меня есть массив, который выглядит следующим образом:

 Array (
    [0] => Array ( [denumireObiect] => Telefon ) 
    [1] => Array ( [denumireObiect] => Laptop ) 
    [2] => Array ( [denumireObiect] => Tableta ) 
    [3] => Array ( [denumireObiect] => Obiect ) 
)
  

Я пытаюсь взять все эти слова и сделать их параметрами для <select> тега.

Это код, который я использую для этого:

 foreach ($result as $i) {
            echo '<option value = ', $result[$i],'>', $result[$i], '</option>';
          }
  

Этот абзац выдает Illegal offset type ошибку.

Это var_dump($result) результат.

 array(4) { 
[0]=> array(1) { 
["denumireObiect"]=> string(7) "Telefon" 
} 

[1]=> array(1) 
{ ["denumireObiect"]=> string(6) "Laptop" } 

[2]=> array(1) {
["denumireObiect"]=> string(7) "Tableta" 
} 

[3]=> array(1) {
["denumireObiect"]=> string(6) "Obiect" } 
} 
...
  

Редактировать:

Я пытался сделать это так:

 foreach ($result as $i => $val) {
        echo '<option value = ', $i,'>', $i, '</option>';
      }
  

и он возвращает 0, 1, 2, 3

Любая помощь приветствуется!

Комментарии:

1. является ли $result тем массивом, который вы упомянули, и не могли бы вы предоставить var_dump($result)? В вашем foreach вы должны иметь возможность доступа к $i без ссылки на массив $result. Но, не зная $result und $i, я не могу сказать вам, как именно

2. @j4g0 Я отредактировал сообщение. добавил var_dump результат и попробовал новый способ сделать это. Надеюсь, это поможет!

3. У меня есть то, что кажется очень глупым вопросом, но это может быть интернационализация… работает ли использование в , качестве конкатенатора строк? AFAIK, вам нужно использовать . ( php.net/manual/en/language.operators.string.php ), но, может быть, это потому, что я нахожусь в США. echo "test","ing"; vs echo "test"."ing"; — я бы ожидал, что первый выдаст ошибку, а второй выведет testing .

4. я не думаю, что это конкатенация, а скорее одно эхо, выводящее несколько строк. Сначала это тоже сбило меня с толку: D

5. вау, ПОКА. Я понятия не имел, что вы могли бы перечислить подобные вещи, которые будут повторены. Конечно же, это задокументировано на echo странице: php.net/manual/en/function.echo.php

Ответ №1:

@WOUNDEDStevenJones сделал хороший вывод. Я обновил свой код, чтобы сделать его более читаемым. Обратите внимание, что вам придется переименовать переменную $result в $results .

Поскольку каждый $result из вашего кода представляет собой ассоциативный массив с одним и тем же "denumireObiect" ключом, вы можете получить следующие значения:

 foreach ($results as $result) {
    echo "<option value="{$result['denumireObiect']}">{$result['denumireObiect']}</option>";
}
  

Если вам не нравится использовать интерполяцию, вы можете переформатировать оператор echo следующим образом:

 echo '<option value="' . $result['denumireObiect'] . '">' . $result['denumireObiect'] . '</option>';
  

или используйте свой предыдущий формат 🙂

Комментарии:

1. Это выдает Trying to access array offset on value of type int ошибку.

2. Я удалил => $val из foreach, нам это не нужно

3. Чтобы быть более понятным, $i обычно используется в качестве счетчика индекса в циклах (т. Е. for($i=0; $i<count($result); $i ) ), Поэтому я бы рекомендовал сохранить этот стиль и либо записать foreach ($result as $i => $val) , а затем использовать $val['denumireObiect'] в цикле (или $result[$i]['denumireObiect'] , но в данном случае это кажется излишне глупым). Таким образом, $i по сути, это все еще счетчик индексов, который является единственным, для чего следует использовать имена переменных с одним символом.