0

こんにちは、時間割クラスに取り組んでいますが、最も奇妙な問題に遭遇しました。いつもは自分ですぐに理解するのですが、今回はまったく意味がありません。

if 句は次のとおりです。

if($start < self::$aStoreHours[$day]['start']){

ここで何も問題がないことがわかるように、配列キーが存在しないことを示す未定義のインデックスエラーが表示されるため、var_dump を使用して完全な配列を返すと、次のようになります: (最初の関連部分のみを切り取ります)

array(6) { [2]=> array(2) { ["start"]=> string(3) "480" ["end"]=> string(4) "1300" }

したがって、キー 2 が存在するので、返される $day 変数をダンプします

string(1) "2"

OK、これは 2 を返します。これは奇妙です。おそらく INT である必要があると思いました (以前はこの問題はありませんでしたが、厳密な言語ではこれが重要です)。intval を使用し、(int) メソッドを使用すると、PHP で未定義のオフセット エラーが発生します。これは問題ではありません

最も奇妙な部分については、完全なエラーは次のとおりです。

Undefined index: 1

だからそれは私に伝えようとしている、それは self::$aStoreHours[1] を呼び出そうとしていますが、$day 変数は間違いなく 2 です (はい、行番号は正しく、2 を返す直前に $day 変数をダンプすると)

したがって、突然 $day 変数は無視されますが、null が返されるため、そうではありません。私の知る限り、$day 変数は配列に存在しないキーである 1 に変更されますが、変更されません。

さらに奇妙なことに、コードは昨日問題なく動作しました (タイムスタンプで動作しているので、それほど奇妙ではありません)。

問題が十分に説明されていて、誰かが私を助けてくれることを願っています。これは私にはまったく意味がありません

注: Laravel フレームワークの使用

更新:はい、関数スコープで実行されます。変数は外部から変更できませんコードの大部分

private static function addTime($day,$start,$end,$title){

    echo $day.':'.$start.':'.$end.':'.$title.'<br>';

    //Check if start isnt lower then opening time, and that end isnt past closing time
    if($start < self::$aStoreHours[$day]['start']){
        $start = self::$aStoreHours[$day]['start'];
    }

    if($end > self::$aStoreHours[$day]['end']){
        $end = self::$aStoreHours[$day]['end'];
    }
4

1 に答える 1

1

有益なコメントのおかげで、最初の呼び出しでは問題が発生しなかったことがわかりましたが、7 回目の呼び出しでは、コードのこの部分を追加することでこれを発見しました

if(!array_key_exists($day, self::$aStoreHours)){
 die(var_dump($day));
}

以前は最初の呼び出しでそれを殺していましたが、その時点では $day はまだ正しかったです。選択されているタイムスタンプは来週の月曜日であり、スクリプトが取得を許可されているため、SQL クエリではありませんでした。今日のタイムスタンプと閉店時の週の最終日のタイムスタンプが含まれている限り、過去と未来のタイムスタンプ

しかし、現在の期間よりも長いか短いタイムスタンプをカットしました。悲しいことに、タイムスタンプをカットするために使用した終了タイムスタンプは、来週の月曜日のタイムスタンプを与える 1 日をはるかに超えています。今週の月曜日として解析しようとしていましたが、火曜日で月曜日は無関係であるため、許可されません。

簡単に言えば、もう少し枠にとらわれずに考える必要があります。

助けてくれてありがとう!

于 2012-12-29T16:46:38.273 に答える