PHPのiterable(イテラブル)疑似型とは?基本から使い方まで徹底解説
PHPには、配列やジェネレーターなど「繰り返し処理が可能なデータ」を扱うためのiterable(イテラブル)という疑似型があります。本記事では、iterable型の定義、構文、そして具体的なコード例を通して、その使い方をわかりやすく解説します。
iterable型の定義と特徴
PHP 7.1以降では、iterableという新しい疑似型が導入されました。この型は、Traversableインターフェイスを実装したオブジェクト(配列など)を受け入れることができます。つまり、foreach文でループ処理できるデータや、yieldを使って一度に1つの値を返すジェネレーター関数が対象となります。
基本的な構文
関数のパラメーターの型としてiterableを指定すると、その関数はforeach文で使用できる一連の値を受け取れるようになります。もし渡された引数がforeachループに対応していない場合、PHPパーサーはTypeErrorをスローします。
コード例:iterableを引数に受け取る関数
<?php
$arr1 = array("PHP", "Java", "Python");
function myfunc(iterable $arr1) {
foreach ($arr1 as $lang) {
echo $lang . "\n";
}
}
myfunc($arr1);
?>
実行結果
PHP Java Python
戻り値としてのiterable型
PHPの関数は、配列のようなiterableデータ型を戻り値として返すこともできます。戻り値がiterable型であるかどうかを確認するには、is_iterable()関数を使用します。
コード例:is_iterable()で検証する
<?php
function newfunc(): iterable {
$arr2 = [];
for ($i = 1; $i < 4; $i++) {
$arr2[$i] = $i * 2;
}
return $arr2;
}
$ret = newfunc();
var_dump(is_iterable($ret));
?>
実行結果
bool(true)
ジェネレーターとの組み合わせ
iterableはジェネレーター関数の戻り値の型としても指定できます。以下は、yieldを使って値を順番に返すジェネレーターの例です。
コード例:iterableな戻り値を持つジェネレーター
<?php
function gen(): iterable {
yield 1;
yield 2;
yield 3;
}
gen();
?>
対応するPHPバージョン
iterable疑似型はPHP 7.1で導入されました。それ以前のバージョンでは使用できないため、注意が必要です。array型やTraversableを実装したクラスと組み合わせることで、柔軟で安全な反復処理を実装できます。
-
PHPのlcg_value()関数とは?乱数生成の基本と使い方を解説
lcg_value()関数の定義と使い方lcg_value()関数は、0から1までの範囲でランダムな数値(浮動小数点数)を生成するPHP組み込み関数です。「LCG」とは「線形合同法(Linear Congruential Generator)」の略称です。この手法は、不連続な区分線形方程式を用いて擬似乱数列を計算するアルゴリズムで、擬似乱数生成アルゴリズムの中でも最も古くから知られているものの一つです。構文lcg_value ( void ) : floatパラメータこの関数は引数を受け取りません。戻り値lcg_value()関数は、0.0以上1.0以下の範囲にある擬似乱数のfloat値を返し
-
PHPのintdiv()関数とは?整数商の求め方と使い方をサンプル付きで解説
定義と使用方法 intdiv() 関数は、2つの整数パラメータを受け取り、その整数商(割り算の結果の整数部分)を返します。x ÷ y の計算結果が商 i、余り r となるとき、次の式が成り立ちます。 x = y × i + r このとき、intdiv(x, y) は i を返します。余りは切り捨てられ、商のみが得られる点に注意してください。 構文 intdiv ( int $x , int $y ) : int パラメータ 番号パラメータと説明 1x割り算の分子(被除数)にあたる値を指定します。 2y割り算の分母(除数)にあたる値を指定します。 戻り値 PHP の intdiv