пробелы в ключе массива не работают при использовании $ _POST? - PullRequest
0 голосов
/ 03 февраля 2020

на сайте я показываю список опций автомобиля в виде флажков.

<?php

foreach ($options as $key => $value) {
?>
   <dl style="margin-bottom: 1em;">
    <dt>
    <?= $key ?>
    </dt>
     <?php
     foreach ($value as $row ) { 
     ?>
        <div class="checkbox">
         <label>
          <input name="options[<?= $row ?>]" value ="1" type="checkbox"> <?= $row ?> 
         </label>
       </div>
     <?php
     }
     ?>

   </dl>

<?php
 }
 ?>

это дает мне флажок, подобный следующему:

<div class="checkbox">
 <label>
  <input name="options[2 deurs]" value ="1" type="checkbox"> 2 deurs
 </label>
</div>

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

$data["optionsarray"] = $this->input->post('options[]', TRUE);

Я заметил, что когда в имени опции есть пробел, ключ массива не показывает это имя.

, поэтому, если имя опции «зеркала», массив выглядит следующим образом:

array(1) { ["mirrors"]=> string(1) "1" }

, но если имя опции: 2 door, я получаю массив, подобный этому:

array(1) { [0]=> string(1) "1" }

Я понятия не имею, почему это происходит, так как я думал, что в ключах массива разрешены пробелы? Есть ли способ предотвратить это или я должен просто заменить пробелы в именах опций, скажем, подчеркиванием?

1 Ответ

0 голосов
/ 03 февраля 2020

Я думаю, что ваша проблема в том, как вы обрабатываете массивы в PHP. Ключи могут быть целыми числами или строками; когда вы оставляете это неоднозначным, PHP пытается решить за вас. Ваш смысл в том, чтобы использовать 2 deurs в качестве строки ключа, но PHP видит это первое целое число и думает, что оно имеет дело с числом. Пример:

php > $array = [];
php > var_dump($array);
array(0) {
}
php > $array[2] = "hello";
php > var_dump($array);
array(1) {
  [2]=>
  string(5) "hello"
}
php > $array[2 things] = "helloooo";

После этой последней команды вы должны увидеть что-то подобное в журнале ошибок php:

PHP Parse error:  syntax error, unexpected 'things' (T_STRING), expecting ']' in php shell code on line 1

и новый ключ не был создан:

php > var_dump($array);
array(1) {
  [2]=>
  string(5) "hello"
}

Ключи, в которых есть пробелы, по своей природе являются строками, и если они приводят к числу, вам определенно необходимо указать PHP, что они являются строками. Заключите ключи в кавычки, если они являются строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...