[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辺りで処理しておくべきでしょう。