web-dev-qa-db-ja.com

警告:array_Push()は、パラメーター1が配列であることを想定しています

これは私のコードであり、この関数を実行すると、次のようになります: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);

            }

        }


    }
5
Osman

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) { ... }
_
19
Matt

global $printed;を使用するか、関数パラメーターとして$printedを追加する必要があります。

関数の参照として$printedパラメーターを渡すこともできます: http://php.net/manual/en/language.references.pass.php

グローバルスコープと変数スコープの詳細: http://php.net/manual/en/language.variables.scope.php

2
maaudet

配列に単一の要素を追加する場合は、関数array_Push()の代わりに$your_array[] = $element_to_be_added;を使用します。

ドキュメントに記載されているように、配列がnullの場合、これにより新しい配列が作成されます。

注:array_Push()を使用して1つの要素を配列に追加する場合は、$ array [] =を使用することをお勧めします。これにより、関数を呼び出すオーバーヘッドがなくなります。

および:

注:array_Push()は、最初の引数が配列でない場合に警告を発します。これは、新しい配列が作成される$ var []の動作とは異なります。

差出人: http://php.net/manual/en/function.array-Push.php

0
trinity420

Is_arrayを検証する必要があります。

if (is_array($arNumbers)) {
    $cellid =  array_Push($arNumbers, 0);
}
0
Jhonny Agudelo