Это мой код, и когда я запускаю эту функцию, я получаю следующее: 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 [], когда создается новый массив.