関数の概要
PHPの is_iterable 関数は、渡された変数が「繰り返し処理可能(foreachで回せる)」な値かどうかを判定するための関数です。配列やイテレータオブジェクトのようにforeachループで扱えるかを簡単にチェックできるため、ループ処理を実行する前に安全に型確認したい場合に便利です。
パラメータの説明
mixed $var– チェック対象の変数を指定します。あらゆる型の値を渡せます。
戻り値
is_iterable は、引数に指定した変数が繰り返し可能であれば true を返し、それ以外の場合は false を返します。例えば、配列や Traversable インターフェースを実装したオブジェクトの場合は true となります。
使用例
基本的な使い方
<?php
$arr = [1, 2, 3];
if (is_iterable($arr)) {
foreach ($arr as $item) {
echo $item . " ";
}
}
// 出力: 1 2 3
?>
配列は繰り返し処理可能なので is_iterable は true を返し、foreachでループが実行されます。
イテレータオブジェクトの判定
<?php
class MyIterator implements Iterator {
private $items = [10, 20, 30];
private $index = 0;
public function current() { return $this->items[$this->index]; }
public function key() { return $this->index; }
public function next() { $this->index++; }
public function rewind() { $this->index = 0; }
public function valid() { return isset($this->items[$this->index]); }
}
$obj = new MyIterator();
if (is_iterable($obj)) {
foreach ($obj as $value) {
echo $value . " ";
}
}
// 出力: 10 20 30
?>
Iteratorを実装したオブジェクトも繰り返し処理可能として認識されます。
繰り返し不可能な値の判定
<?php
$value = 100;
if (is_iterable($value)) {
echo "繰り返し可能";
} else {
echo "繰り返し不可能";
}
// 出力: 繰り返し不可能
?>
整数や文字列のような単一の値は繰り返し処理できないので false が返り、繰り返し不可能と判断されます。
関連する関数
is_array– 配列かどうかを調べる関数。is_iterableより限定的。instanceof Traversable– オブジェクトがTraversableインターフェースを実装しているかを調べる演算子。gettype– 変数の型を文字列で取得できる。広い意味で型判定に使う。
まとめ
is_iterable はPHPで変数がforeachループで扱えるかを簡単に判定できる便利な関数です。配列だけでなくイテレータオブジェクトにも対応しているため、ループに渡す値の安全性をチェックしたい時に活用できます。実務でforeachを使う処理を実装する際は、エラー回避のためにも事前に確認しておくと良いでしょう。
