Получение данных из почтового массива в CodeIgniter - PullRequest
8 голосов
/ 24 июня 2010

Хорошо, у меня есть форма, которая отправляет мне массивы в массиве POST.Я пытаюсь прочитать это так:

$day = $this->input->post("days")[0];

Это не работает.PHP говорит "неожиданно" ['".Почему это не работает?

Я исправил это следующим образом:

$days = $this->input->post("days");
$day = $days[0];

Я исправил свою проблему, мне просто любопытно, почему первый способ не сработал.

Ответы [ 5 ]

9 голосов
/ 24 июня 2010

Разыменование массива от вызовов функций не поддерживается PHP. Он реализован в магистральной версии PHP SVN, поэтому он, вероятно, войдет в будущие версии PHP. А пока вам придется прибегнуть к тому, что вы делаете сейчас. Для перечисляемых массивов вы также можете использовать list:

list($day) = $this->input->post("days");

См .: http://php.net/list

8 голосов
/ 24 июня 2010

Синтаксис такой:

$day = $this->input->post("days")[0];

не поддерживается в PHP.Вы должны делать то, что делаете:

$days = $this->input->post("days");
$day = $days[0];
6 голосов
/ 25 июня 2010

Другим подходом может быть перебор массива с использованием foreach, например, так:

foreach($this->input->post("days") as $day){
    echo $day;
}
1 голос
/ 26 марта 2014

В дополнение к ответ Даниэля Эгеберга :

Обратите внимание, что list() работает только с числовыми массивами .Если вы / кто-либо хотите прочитать массив ассоциативный , например,

$_POST['date'] = array
                 (
                    'day'   => 12
                    'month' => 7
                    'year'  => 1986
                 )

используйте функцию extract() для указанного выше массива как,

extract($this->input->post("date"), EXTR_PREFIX_ALL, "date");

Теперь следующие переменные будут доступны для использования в качестве

$date_day = 19, $date_month = 7 and $date_year = 1986

ПРИМЕЧАНИЕ: в приведенной выше функции, первый аргумент - массив записей, второй - защитаот переменных столкновений, и третий префикс.

Подробнее о extract(), см. это .

Надеюсь, это поможет:)

0 голосов
/ 15 сентября 2016

Я бы всегда так делал ..

for($i=0; $i<count($this->input->post("days")); $i++)
{
  $day[$i] = $this->input->post("days[".$i."]");
}

Это было бы полезно, если вам нужно взаимодействовать с БД, проверяя каждое значение, переданное вашим представлением в виде массива. В противном случае я предпочитаю цикл foreach.

Приветствие ..

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