「Invalid argument supplied for foreach() …」エラーの対処法
型が配列じゃない変数でforeachを実行した時にでる「Invalid argument supplied for foreach() …」エラーの対処法を紹介します。
まえがき
みなさんphpのforeach文でこんなエラー出たことないですか?
Warning: Invalid argument supplied for foreach() in ファイルのパス
KoToRiはマジで良くこのエラーだしちゃうんですよね。
その度にGoogleで検索して修正してってのをかれこれ10回くらい繰り返しているので、いい加減記事にして同じ過ちは2度と繰り返さないように対処方法を心に刻みつけたいと思います。
「Invalid argument supplied for foreach() …」エラーの原因
「Invalid argument supplied for foreach() …」エラーの原因は配列の形式ではない変数でforeach文を実行しようとしているからです。
基本に返ってforeachの解説を見てみましょう。
foreach は、配列を反復処理するための便利な方法です。 foreach が使えるのは配列とオブジェクトだけであり、 別のデータ型や初期化前の変数に対して使うとエラーになります。 この構造には二種類の構文があります。
引用元:http://php.net/manual/ja/control-structures.foreach.php
もろに
foreach が使えるのは配列とオブジェクトだけであり
って書いてあるやんw
これで原因は明確に分かったと思います。
次の項で「Invalid argument supplied for foreach() …」エラーを解決していきましょう。
「Invalid argument supplied for foreach() …」エラーの対処法
めちゃくちゃ簡単です。
普通のforeach文はこんな感じですよね。
foreach ($arr as $value) { // hogehoge. }
上のコードを下記のように書き換えます。
foreach ((array)$arr as $value) { // hogehoge. }
「(array)$arr」で$arrを強制的に配列の形にすることで「Invalid argument supplied for foreach() …」エラーを回避することができます。
foreachで回す変数の前に「(array)」を付けるだけなので簡単ですね。
まとめ
すごい簡単なハズなのに、何故か直ぐ忘れて1か月後とかに同じ状況になって「あれ~どうやるんだっけな~」ってなってGoogle先生に聞く。
この無限ループからようやく抜け出せそうです。
これからforeach使うときは最初から「(array)」付けちゃおうと思います。
参考サイト
ありがとうございます。