Итак, у меня есть форма, которая отправляет мне массивы в массиве POST. Я пытаюсь прочитать его так:
$day = $this->input->post("days")[0];
Это не работает. PHP говорит «неожиданно» ['". Почему это не работает?
Я исправил это, сделав так:
$days = $this->input->post("days"); $day = $days[0];
Я исправил свою проблему, мне просто интересно, почему первый способ не сработал.
PHP не допускает переустановки из вызовов функций. Он реализован в версии SVN trunk версии PHP, поэтому он, скорее всего, превратится в будущие версии PHP. Сейчас вам придётся прибегнуть к тому, что вы сейчас делаете. Для перечисляемых массивов вы также можете использовать list
:
list($day) = $this->input->post("days");
См .: http://php.net/list
Синтаксис:
$day = $this->input->post("days")[0];
не поддерживается в PHP. Вы должны делать то, что делаете:
$days = $this->input->post("days"); $day = $days[0];
Другим подходом может быть итерация по массиву с помощью foreach
:
foreach($this->input->post("days") as $day){ echo $day; }
В дополнение к ответу Даниэля Эгеберга :
Обратите внимание, что list()
работает только с числовыми массивами . Если вы / любой человек хотите прочитать ассоциативный массив, например,
$_POST['date'] = array ( 'day' => 12 'month' => 7 'year' => 1986 )
используйте функцию extract()
для указанного массива as,
extract($this->input->post("date"), EXTR_PREFIX_ALL, "date");
Теперь следующие переменные будут доступны для использования как,
$date_day = 19, $date_month = 7 and $date_year = 1986
ПРИМЕЧАНИЕ. В приведенной выше функции первым аргументом является массив сообщений, второй – для защиты от переменных коллизий, а третий – префикс.
Для получения дополнительной информации о extract()
см. Это .
Надеюсь это поможет 🙂
Я бы всегда так делал.
for($i=0; $i<count($this->input->post("days")); $i++) { $day[$i] = $this->input->post("days[".$i."]"); }
Это было бы полезно, если вам нужно взаимодействовать с db, проверив каждое значение, переданное вашим представлением в виде массива. В противном случае я предпочитаю цикл foreach.
Ура ..