PHP foreach文で変数が配列でない場合のエラー回避

foreach文で変数が配列でない場合は、

<?php // エラーになる場合
header('Content-Type: text/html; charset=UTF-8');
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output('UTF-8');

$temp = "test";    // $tempは配列ではない

foreach($temp as $key => $val){
  echo "Key = $key, Val = $val\n";
}

?>

「Warning: Invalid argument supplied for foreach()」と言うワーニングエラーが起きてしまいます。

foreach文へ与える変数が、通常は配列になる予定が、たまたま変数が配列でない結果が出てしまった場合。

処理が中断してしまって困ることがあります。

そんな場合の解決法。

foreach文で変数を(array)でキャストします。

<?php // エラーを回避する場合
header('Content-Type: text/html; charset=UTF-8');
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output('UTF-8');

$temp = "test";    // $tempは配列ではない

foreach((array)$temp as $key => $val){
  echo "Key = $key, Val = $val\n";
}

?>

 

結果エラーにはならず、配列として処理できます。