警告:array_push()预计参数1是阵列(Warning: array_push() expe

2019-07-31 06:34发布

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

            }

        }


    }

Answer 1:

在范围,其中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 。 上述实施例是等价的。 下面的例子就相当于使用global (和,事实上,比使用一个更好的做法global -它迫使你与你的代码更加审慎,防止意外的数据操作):

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


Answer 2:

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

您还可以通过$printed参数作为在功能参考: http://php.net/manual/en/language.references.pass.php

更多关于全球和可变范围: http://php.net/manual/en/language.variables.scope.php



Answer 3:

取而代之的是功能的array_push()使用$your_array[] = $element_to_be_added; 当你想要一个单一的元素添加到阵列中。

如文档提到,这将创建一个新的数组,如果数组为空:

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

和:

注:array_push()将抛出一个警告,如果第一个参数不是数组。 这不同于在其中创建一个新的数组是$ var []的行为。

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



文章来源: Warning: array_push() expects parameter 1 to be array