PHPの「Warning: Invalid argument supplied for foreach()」対処



PHPのforeach文を使用しているとwarningが出力されることがあります。
Warning: Invalid argument supplied for foreach() ...
こんな時の対処方法。

原因

foreach文の変数が配列型ではないのが原因。
こういう時に出てしまいます。
<?php
$arg = null;
foreach($arg as $value){
	echo $value;
}
?>
具体的にはforeachを行う変数がnullの時等のarray型以外の時です。

修正方法

修正方法は2つ。

arrayキャストを行う

foreachを行う変数をarrayに変換することでforeachが問題ないように動かすことが出来ます。
変数の前に(array)と付けるだけで簡単にarray型に変換してくれます。
<?php
$arg = null;
foreach((array)$arg as $value){
	echo $value;
}
?>
ただし、この方法だと元の型がObject型だとうまくいかない時があるので注意してください。

変数をチェックする

対象の変数がarray型以外の場合はforeachを回さないようにします。
<?php
$arg = null;
if(is_array($arg)){
	foreach((array)$arg as $value){
		echo $value;
	}
}
?>
こちらは普通にis_arrayを行ってarray型以外はforeach文を回さないようにしています。

所見

PHPは優しいためwarningで済まされてしまいます。
warningエラーを出力しないように対処とかはなるべくやめてちゃんと配列にするかエラーチェックを行いましょう。


コメントを残す