【PHP8.x】is_iterable関数の使い方

is_iterable関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

is_iterable関数は、指定された変数が反復処理可能であるか、すなわち「イテレート可能」であるかを判定する関数です。この関数は、変数がイテレート可能である場合にはtrueを、そうでない場合にはfalseを返します。

PHPにおいて「イテレート可能」とは、foreachループを使って要素を一つずつ取り出し、処理できる特性を指します。具体的には、配列、またはTraversableインターフェースを実装したオブジェクトがこれに該当します。Traversableインターフェースは、IteratorIteratorAggregateといったイテレータを実装するクラスが共通して持つ基盤となるインターフェースです。

この関数を使用することで、foreachループで処理する前に、対象の変数が安全に反復可能であることを事前に確認できます。これにより、意図しない型のエラーや警告の発生を防ぎ、プログラムの安定性を向上させることができます。特に、外部からの入力値や、他の関数やメソッドから返される値が、期待通り配列やイテレータとして処理可能であるかを事前にチェックする際に非常に役立ちます。PHP 8の環境下でも、この機能はデータの型安全性を高める上で重要な役割を果たします。

構文(syntax)

1<?php
2$iterable_data = [1, 2, 3];
3$not_iterable_data = "Hello";
4
5var_dump(is_iterable($iterable_data));
6var_dump(is_iterable($not_iterable_data));
7?>

引数(parameters)

mixed $value

  • mixed $value: イテラブルかどうかを判定したい値

戻り値(return)

bool

指定された変数がiterable(配列またはTraversableインターフェースを実装したオブジェクト)である場合にtrueを、そうでない場合にfalseを返します。

サンプルコード

PHP: is_iterableでiterableをチェックする

1<?php
2
3/**
4 * iterableかどうかをチェックする例
5 */
6function checkIterable(mixed $value): void
7{
8    if (is_iterable($value)) {
9        echo "The value is iterable.\n";
10    } else {
11        echo "The value is not iterable.\n";
12    }
13}
14
15// 配列のチェック
16$array = [1, 2, 3];
17echo "Checking an array:\n";
18checkIterable($array);
19
20// Traversableオブジェクトのチェック
21$traversable = new ArrayIterator([4, 5, 6]);
22echo "\nChecking a Traversable object:\n";
23checkIterable($traversable);
24
25// 文字列のチェック
26$string = "hello";
27echo "\nChecking a string:\n";
28checkIterable($string);
29
30// 整数のチェック
31$integer = 123;
32echo "\nChecking an integer:\n";
33checkIterable($integer);

PHP 8におけるis_iterable関数は、与えられた変数がiterableかどうかを判定する関数です。iterableとは、foreachループで反復処理できるデータ構造(配列やTraversableインターフェースを実装したオブジェクトなど)のことです。

is_iterable関数は、引数として任意の型の変数 $value を受け取ります。この $value がiterableであれば true を、そうでなければ false を返します。

サンプルコードでは、checkIterableという関数を定義し、様々な型の変数をis_iterable関数に渡して、その結果を表示しています。

配列($array)はiterableなので、is_iterable($array)trueを返し、「The value is iterable.」と出力されます。同様に、ArrayIteratorオブジェクト($traversable)もiterableなので、is_iterable($traversable)trueを返し、同じメッセージが出力されます。

一方、文字列($string)や整数($integer)はiterableではないので、is_iterable($string)is_iterable($integer)はそれぞれfalseを返し、「The value is not iterable.」と出力されます。

この関数を使用することで、foreachループを実行する前に、変数がiterableかどうかを事前に確認し、エラーを回避することができます。例えば、ユーザーからの入力に基づいて処理を行う場合、入力が配列であるかを確認する際に役立ちます。

is_iterable()関数は、変数が配列またはTraversableインターフェースを実装したオブジェクトかどうかを判定します。文字列や整数などのスカラー値はiterableではないため、falseを返します。is_iterable()は、foreachループで処理できるかどうかを確認するのに役立ちます。

この関数を使用する際は、引数の型に注意してください。意図しない型の変数を渡すと、予期せぬ結果になる可能性があります。特に、外部からの入力値を扱う場合は、事前に型を確認することが重要です。

また、PHP8からは、オブジェクトがTraversableインターフェースを実装していなくても、iterator_to_array()などで配列に変換できる場合がありますが、is_iterable()Traversableインターフェースを実装しているかどうかを厳密にチェックします。

php is_iterable でiterableを判定する

1<?php
2
3/**
4 * is_iterable 関数の使用例
5 */
6
7$array = [1, 2, 3];
8$object = new ArrayObject($array);
9$integer = 123;
10
11// 配列は iterable です
12if (is_iterable($array)) {
13    echo "配列は iterable です\n";
14} else {
15    echo "配列は iterable ではありません\n";
16}
17
18// ArrayObject は iterable です
19if (is_iterable($object)) {
20    echo "ArrayObject は iterable です\n";
21} else {
22    echo "ArrayObject は iterable ではありません\n";
23}
24
25// 整数は iterable ではありません
26if (is_iterable($integer)) {
27    echo "整数は iterable です\n";
28} else {
29    echo "整数は iterable ではありません\n";
30}
31
32?>

is_iterable() 関数は、PHP 8 で導入された、変数が iterable であるかどうかを判定する関数です。iterable とは、foreach ループで反復処理できるデータ構造のことです。具体的には、配列(array)や Traversable インターフェースを実装したオブジェクトなどが該当します。

この関数は、引数 $value に判定したい変数を渡します。引数の型は mixed 型なので、どんな型の変数でも渡すことができます。

戻り値は、bool 型です。引数 $value が iterable であれば true、そうでなければ false を返します。

サンプルコードでは、配列、ArrayObject、整数という3つの異なる型の変数を is_iterable() 関数に渡し、結果を表示しています。配列は iterable なので trueArrayObject も iterable なので true、整数は iterable ではないので false が返されることが確認できます。

システムエンジニアを目指す上で、is_iterable() 関数は、変数の型をチェックし、安全に foreach ループを使用するために非常に役立ちます。予期せぬエラーを回避し、より堅牢なコードを作成するために、この関数の使い方を理解しておくことをお勧めします。

is_iterable()関数は、変数がforeach文などで反復処理できるかを確認します。配列(array)やArrayObjectなどのオブジェクトは反復可能(iterable)ですが、整数(integer)のようなスカラー値は反復できません。この関数を使うことで、予期せぬエラーを避けることができます。反復処理を行う前にis_iterable()でチェックすることで、型エラーを防ぎ、安全なコードを書くことができます。PHP 7.1以降で使用可能です。もしPHPのバージョンが古い場合は、この関数は利用できませんのでご注意ください。

関連コンテンツ