FrontendPHP

[PHPエラー]Invalid argument supplied for foreach() in についてとその回避法

PHPで「Warning:Invalid argument supplied for foreach() in 〜」が発生した場合の原因と対応法について簡単にまとめました。

広告ここから
広告ここまで

「Invalid argument supplied for foreach() in 〜」は「無効な引数がforeachに渡されています」というエラーです。

nullや配列で無いものをforeachに渡すと発生します。

例えばこんなコードなど↓

[php]
$value = null;
var_dump($value);
foreach ($value as $keys => $fuga) {
var_dump($fuga);
}
[/php]

配列ではない場合もNGですので、「$value=”hogehoge”」のような場合も怒られます。

このエラーへの対応法

手っ取り早い対応法は、is_array()関数を使って配列でない場合は処理を行わないようにすることでしょうか。

*サンプルコード
[php]
$value = null;
var_dump($value);
if(is_array($value)){
foreach ($value as $keys => $fuga) {
var_dump($fuga);
}
}
[/php]

is_array()関数とは?

(PHP 4, PHP 5)
is_array — 変数が配列かどうかを検査する
PHP: is_array – Manual

もう1つの対応法

配列チェックではなく、(array)$valueで強制的に配列にしてしまう処理方法もある様子です。

[php]
$value = null;
var_dump($value);
foreach ((array)$value as $keys => $fuga) {
var_dump($fuga);
}
[/php]

このコードでは、$arrayがnullの場合は要素が0個の配列にキャストされ、$arrayが配列でない型の場合は要素が1個の配列(元の$arrayを唯一の要素に持つ配列)にキャストされます。

PHPのforeach文でnullチェックなしでエラー回避| リスティング広告の運用代行ならカルテットコミュニケーションズ

WARNINGなので無視してしまうことも可能ですが、後の処理でFATAL ERRORを引き起こしやすいのでis_array辺りで処理しておくべきでしょう。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts