这是我的代码,当我运行此函数时,我得到了这个: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);
}
}
}
答案 0 :(得分:17)
在调用array_push()
的范围内,$printed
从未初始化。将其声明为global
或将其包含在函数参数中:
$printed = array();
.
.
.
function dayAdvance ($startDay, $endDay, $weekType){
global $printed;
.
.
.
}
OR
function dayAdvance ($startDay, $endDay, $weekType, $printed = array()) { ... }
注意:强>
array_push()
的更快替代方法是使用[]
简单地将值附加到数组中:
$printed[] = $newdateform;
此方法将自动检测变量是否从未初始化,并在附加数据之前将其转换为数组(换句话说,没有错误)。
<强>更新强>
如果您希望$printed
的值在函数之外保留,则必须通过引用传递它或将其声明为global
。以上示例 NOT 等效。以下示例等同于使用global
(事实上,这是一种比使用global
更好的做法 - 它会强迫您更加谨慎地使用代码,防止意外的数据操作):
function dayAdvance ($startDay, $endDay, $weekType, &$printed) { ... }
答案 1 :(得分:2)
您需要使用global $printed;
或添加$printed
作为函数参数。
您也可以在函数中传递$printed
参数作为参考:http://php.net/manual/en/language.references.pass.php
有关全局和变量范围的更多信息:http://php.net/manual/en/language.variables.scope.php
答案 2 :(得分:0)
当您想要向数组添加单个元素时,使用array_push()
而不是函数$your_array[] = $element_to_be_added;
。
如文档中所述,如果数组为null,则会创建一个新数组:
注意:如果使用array_push()向数组添加一个元素,最好使用$ array [] =,因为这样就没有调用函数的开销。
和
注意:如果第一个参数不是数组,array_push()将发出警告。这与创建新数组的$ var []行为不同。
答案 3 :(得分:0)
您需要验证is_array:
示例
if (is_array($arNumbers)) {
$cellid = array_push($arNumbers, 0);
}