Предупреждение: 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('Y-m-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);
 }
 }
 }
3 ответа

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

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

ИЛИ

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

Примечание:

Более быстрая альтернатива array_push() заключается в просто добавлении значений в ваш массив с помощью []:

$printed[] = $newdateform;

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

UPDATE:

Если вы хотите, чтобы значение $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 [], когда создается новый массив.

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

licensed under cc by-sa 3.0 with attribution.