invalid argument supplied for foreach

https://himaise.com/php/

エラー内容

phpで吐かれたエラー。

訳すと、「foreachに無効な引数が指定された」となる。

公式を見てみる。

foreach

foreach は、配列を反復処理するための便利な方法です。 foreach が使えるのは配列とオブジェクトだけであり、 別のデータ型や初期化前の変数に対して使うとエラーになります。

https://www.php.net/manual/ja/control-structures.foreach.php

つまり、現状、配列とオブジェクト以外のものが、引数に入ってきていることになる。
ここを修正すれば良い。

解決の流れ

ググると強制的にキャスト変換すれば良いというような話が検索結果の上位に来るが、安易にarrayキャストする前に、まずはデバッグしてどういうデータが入ってきているのか、そのデータはどういった原因で起きたものなのかを検証することの方が必要になる。
キャスト変換して望んだデータの形に変換しても、根本的に何が問題か特定できてなければ、矛盾した処理が動いていることになり、バグの温床になってしまう。

→本来想定したデータは何で、エラー吐かれている時にはどんなデータが入ってきたか検証
→そのデータはどのような操作、過程により生じるのか再現
→foreach以前の処理の変更、見直し

という流れになる。

以上

php, programming

Posted by 異世界攻略班