Oddwit


foreachで(僕が)よく引っかかる罠

Posted in PHP, Programming by マルコ on the February 12th, 2007

PHPで配列を扱うときは、中身をイテレートしてくれる foreach が必需品だ。

foreach ($var as $key=>$value){
	echo $value;
}

でもあまり無防備にコードを書いていると、それまでずっと機嫌よく動いていたスクリプトが突然醜いエラーを吐くことがある。

Warning: Invalid argument supplied for foreach() in index.php on line 3

これは $var が配列でなかった場合に起こってしまう。こういうコードを書くときは $var が必ず配列だと思い込んでいることが多いが、実際には特定の条件下で null だったりすることがたまにある。

そこで、foreach に配列を入れる際に必ず配列型かどうかをチェックしたほうがよい。

if (is_array($var)){
	foreach ($var as $key=>$value){
		echo $value;
	}
}

もしくは、配列型にキャストしてもよい。こちらの方がコードは読みやすい。

foreach ((array)$var as $key=>$value){
	echo $key." : ".$value;
}

ちなみに null を配列にキャストすると、空の配列になる。つまりそのまま何事も無かったかのように foreach をスルーできる。それ以外のものをキャストすると要素を一つだけ持った配列になるということも、キャストで foreach を使うなら覚えておいた方がいい。

Leave a Reply