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 に答える