Intereting Posts
Как получить полный путь к php-интерпретатору / двоичному файлу без доступа к оболочке Незаконный строковый корректор Неустранимая ошибка: заявление об объявлении пространства имен должно быть самым первым в сценарии в Запустить XDebug в Netbeans по внешнему запросу Как объединить два массива без повторных значений? Сеансы Codeigniter по субдоменам php – получить числовой индекс ассоциативного массива Ошибка nginx подключиться к php5-fpm.sock не удалось (13: отказ от прав) Разверните несколько платформ на Elastic Beanstalk (PHP / Python) Использование подстановочных знаков в подготовленном сообщении – MySQLi Структура папки для проекта PHP Regex для соответствия определенным значениям из файла виртуального хоста Apache Форма Ajax не работает с Internet Explorer 8,9 Сохранение содержимого или холста Div в качестве изображения Как использовать метод jquery $ .post () для отправки значений формы

Предупреждение: array_push () ожидает, что параметр 1 будет массивом

Это мой код, и когда я запускаю эту функцию, я получаю следующее: Warning: array_push() expects parameter 1 to be array Однако я определяю $printed как массив перед запуском.

 $printed = array(); function dayAdvance ($startDay, $endDay, $weekType){ $newdateform = array( 'title' => date("M d", strtotime($startDay))." to ".date("M d", strtotime($endDay)). $type, 'start' => $startDay."T08:00:00Z", 'end' => $startDay."T16:00:00Z", 'url' => "http://aliahealthcareer.com/calendar/".$_GET['fetching']."/".$startDate); array_push($printed, $newdateform); if ($weekType=="weekend"){ $days="Saturday,Sunday"; } if ($weekType=="day"){ $days="Monday,Tuesday,Wednesday,Thuresday,Friday"; } if ($weekType=="evening"){ $days="Monday,Tuesday,Wednesday"; } $start = $startDate; while($startDay <= $endDay) { $startDay = date('Ym-d', strtotime($startDay. ' + 1 days')); $dayWeek = date("l", strtotime($startDay)); $pos = strpos($dayWeek, $days); if ($pos !== false) { $newdateform = array( 'title' => date("M d", strtotime($start))." to ".date("M d", strtotime($endDate)). $type, 'start' => $startDate."T08:00:00Z", 'end' => $startDate."T16:00:00Z", 'url' => "http://aliahealthcareer.com/calendar/".$_GET['fetching']."/".$startDate); array_push($printed, $newdateform); } } } 

В области, в которой array_push() , $printed array_push() никогда не инициализировался. Либо объявите его global либо включите его в параметры функции:

 $printed = array(); . . . function dayAdvance ($startDay, $endDay, $weekType){ global $printed; . . . } 

ИЛИ

 function dayAdvance ($startDay, $endDay, $weekType, $printed = array()) { ... } 

ЗАМЕТКА:

Более быстрая альтернатива array_push() – просто добавить значения в ваш массив, используя [] :

 $printed[] = $newdateform; 

Этот метод автоматически определит, была ли переменная никогда не инициализирована и не конвертировала ее в массив до добавления данных (другими словами, без ошибок).

ОБНОВИТЬ:

Если вы хотите, чтобы значение $printed сохранялось за пределами функции, вы должны либо передать его по ссылке, либо объявить его global . Вышеприведенные примеры НЕ эквивалентны. Следующий пример будет эквивалентен использованию global (и, по сути, лучшей практики, чем использование global это заставляет вас быть более преднамеренным с вашим кодом, предотвращая случайное манипулирование данными):

 function dayAdvance ($startDay, $endDay, $weekType, &$printed) { ... } 

Вам нужно использовать global $printed; или добавить $printed как параметр функции.

Вы также можете передать параметр $printed качестве ссылки в своей функции: http://php.net/manual/en/language.references.pass.php

Подробнее о глобальных и переменных областях: http://php.net/manual/en/language.variables.scope.php

Вместо функции array_push() используйте $your_array[] = $element_to_be_added; когда вы хотите добавить в массив один элемент.

Как упоминалось в документах, это создает новый массив, если массив равен null:

Примечание. Если вы используете array_push () для добавления одного элемента в массив, лучше использовать $ array [] =, потому что таким образом нет накладных расходов на вызов функции.

а также:

Примечание: array_push () вызовет предупреждение, если первый аргумент не является массивом. Это отличается от поведения $ var [], когда создается новый массив.

от: http://php.net/manual/en/function.array-push.php