10

这是我的代码,当我运行这个函数时,我得到这个: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);

            }

        }


    }
4

4 回答 4

26

array_push()被调用的范围内,$printed从未初始化过。将其声明为global或包含在函数参数中:

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

或者

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

笔记:

一个更快的替代方法array_push()是简单地将值附加到您的数组中[]

$printed[] = $newdateform;

此方法将自动检测变量是否从未初始化,并在附加数据之前将其转换为数组(换句话说,没有错误)。

更新:

如果您希望 的值$printed在函数之外持续存在,则必须通过引用传递它或将其声明为global. 上面的例子是等价的。以下示例等效于 using global(实际上,它是比 using 更好的做法global- 它迫使您对代码更加谨慎,防止意外的数据操作):

function dayAdvance ($startDay, $endDay, $weekType, &$printed) { ... }
于 2012-08-30T20:12:32.560 回答
2

您需要使用global $printed;或添加$printed为函数参数。

您也可以$printed在函数中将参数作为参考传递:http: //php.net/manual/en/language.references.pass.php

有关全局和变量范围的更多信息:http: //php.net/manual/en/language.variables.scope.php

于 2012-08-30T20:11:46.687 回答
0

当您想向数组添加单个元素时,而不是array_push()使用函数。$your_array[] = $element_to_be_added;

如文档中所述,如果数组为空,则会创建一个新数组:

注意:如果您使用 array_push() 向数组添加一个元素,最好使用 $array[] = 因为这样就没有调用函数的开销。

和:

注意:如果第一个参数不是数组,array_push() 将引发警告。这与创建新数组的 $var[] 行为不同。

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

于 2017-06-05T09:21:32.163 回答
0

您需要验证 whit is_array:

例子

if (is_array($arNumbers)) {
    $cellid =  array_push($arNumbers, 0);
}
于 2019-08-22T02:42:08.507 回答