is_iterable

関数の概要

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_iterabletrue を返し、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を使う処理を実装する際は、エラー回避のためにも事前に確認しておくと良いでしょう。