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