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

作成日: 更新日:

array_is_list関数は、指定された配列が「リスト」であるかどうかを判定する関数です。PHP 8.1.0で導入されました。「リスト」とは、配列のキーが0から始まり、連続した整数で構成されている配列のことです。具体的には、配列のキーが 0, 1, 2, ... のように順番に並んでいる必要があります。キーが欠けていたり、順番が異なっていたり、文字列キーが含まれている場合は、「リスト」とはみなされません。

この関数は、配列がリストである場合に true を、そうでない場合に false を返します。空の配列はリストとみなされ、true が返されます。

array_is_list関数は、配列の構造を検証する際に非常に役立ちます。例えば、配列が連番のデータセットを表していることを確認したり、配列に対して特定の処理(例えば、インデックスに基づいた処理)を行う前に、その配列がリストの形式に合致しているかを検証したりする際に利用できます。この関数を使用することで、予期しないエラーやバグを未然に防ぎ、プログラムの信頼性を向上させることができます。また、コードの可読性を高める効果も期待できます。なぜなら、array_is_list関数を使うことで、配列の構造に関する意図を明確に表現できるからです。

基本的な使い方

構文(syntax)

array_is_list(array $array): bool

引数(parameters)

array $array

  • array $array: チェックする配列

戻り値(return)

bool

配列が数値インデックスで0から連続してキーが振られているリスト形式かどうかを真偽値(trueまたはfalse)で返します。

サンプルコード

PHP 8 array_is_list で配列がリストか判定する

<?php

/**
 * PHPの array_is_list 関数の使用例を示します。
 *
 * この関数は、指定された配列が「リスト」であるかどうかを判別します。
 * 「リスト」とは、0から始まる連続した整数キーを持つ配列のことです。
 * array_is_list は PHP 8.0 で追加されました。
 */
function demonstrateArrayIsListUsage(): void
{
    echo "--- array_is_list 関数の動作例 ---\n\n";

    // 1. 標準的なリスト配列(0から始まる連続した整数キーを持つ)
    $listArray1 = [10, 20, 30];
    echo "配列: [" . implode(', ', $listArray1) . "]\n";
    echo "  -> array_is_list(): " . (array_is_list($listArray1) ? 'true' : 'false');
    echo " (理由: 0から始まる連続した整数キーです)\n\n";

    // 2. 明示的にキーを指定したリスト配列(0から始まる連続した整数キーを持つ)
    $listArray2 = [0 => 'apple', 1 => 'banana', 2 => 'cherry'];
    echo "配列: [0 => 'apple', 1 => 'banana', 2 => 'cherry']\n";
    echo "  -> array_is_list(): " . (array_is_list($listArray2) ? 'true' : 'false');
    echo " (理由: 0から始まる連続した整数キーです)\n\n";

    // 3. 連想配列(文字列キーを含む)
    $associativeArray = ['name' => 'Alice', 'age' => 25];
    echo "配列: ['name' => 'Alice', 'age' => 25]\n";
    echo "  -> array_is_list(): " . (array_is_list($associativeArray) ? 'true' : 'false');
    echo " (理由: 文字列キーがあるため、リストではありません)\n\n";

    // 4. キーが連続していない配列
    $nonContinuousKeysArray = [0 => 'first', 2 => 'third']; // キー '1' が欠落
    echo "配列: [0 => 'first', 2 => 'third']\n";
    echo "  -> array_is_list(): " . (array_is_list($nonContinuousKeysArray) ? 'true' : 'false');
    echo " (理由: キーが0から始まっていても連続していないため、リストではありません)\n\n";

    // 5. キーが0から始まらない配列
    $nonZeroStartingKeysArray = [1 => 'one', 2 => 'two']; // キーが '0' から始まっていない
    echo "配列: [1 => 'one', 2 => 'two']\n";
    echo "  -> array_is_list(): " . (array_is_list($nonZeroStartingKeysArray) ? 'true' : 'false');
    echo " (理由: キーが0から始まっていないため、リストではありません)\n\n";

    // 6. 負の整数キーを含む配列
    $negativeKeyArray = [-1 => 'minus_one', 0 => 'zero'];
    echo "配列: [-1 => 'minus_one', 0 => 'zero']\n";
    echo "  -> array_is_list(): " . (array_is_list($negativeKeyArray) ? 'true' : 'false');
    echo " (理由: 負の整数キーがあるため、リストではありません)\n\n";

    // 7. 空の配列
    $emptyArray = [];
    echo "配列: []\n";
    echo "  -> array_is_list(): " . (array_is_list($emptyArray) ? 'true' : 'false');
    echo " (理由: 空の配列はPHPにおいてリストと見なされます)\n\n";
}

// 上記の関数を実行して、array_is_list の動作を確認します。
demonstrateArrayIsListUsage();

?>

PHPのarray_is_list関数は、指定された配列が「リスト」であるかどうかを判別するために使用されます。この関数はPHP 8.0で追加されました。引数として判定したい配列($array)を受け取り、その配列がリストであると判断されればtrueを、そうでなければfalseをブール値として返します。

ここで言う「リスト」とは、0から始まる連続した整数キーのみを持つ配列を指します。例えば、[10, 20, 30]のように値のみを並べた配列(この場合、PHPは自動的に0, 1, 2という整数キーを割り当てます)や、[0 => 'apple', 1 => 'banana']のように明示的に0から始まる連続した整数キーを持つ配列はリストと見なされます。また、空の配列[]もリストとして扱われます。

一方で、['name' => 'Alice']のような文字列キーを含む連想配列、[0 => 'first', 2 => 'third']のように整数キーが0から始まっていても途中のキーが欠落している(連続していない)配列、[1 => 'one']のようにキーが0から始まっていない配列、または負の整数キーを含む配列はリストとは見なされません。この関数を使うことで、配列の構造を簡単に確認でき、状況に応じた処理の分岐などに役立てることができます。

array_is_list関数はPHP 8.0で導入された新しい関数です。そのため、PHP 7以前の環境ではこの関数は存在せず、実行するとエラーになりますので、使用するPHPのバージョンに注意が必要です。

この関数は、配列のキーが0から始まり、途切れることなく連続した整数である場合にのみtrueを返します。例えば、['apple', 'banana']のような配列や、明示的に[0 => 'apple', 1 => 'banana']と指定した配列が該当します。

文字列キーを持つ連想配列や、キーが欠けている配列、0から始まらない配列、負の整数キーを含む配列は「リスト」とは判断されず、falseが返されます。ただし、空の配列[]は例外的にリストと見なされます。この関数を利用することで、配列が期待するリスト構造であるかを事前に確認し、コードの安全性や予測可能性を高めることができます。

PHP配列がリスト形式か判定する

<?php

/**
 * array_is_list()関数の使用例を示します。
 * 配列がリスト形式(0から始まる連続した整数キーを持つ)であるかを確認します。
 *
 * @return void
 */
function demonstrateArrayIsListUsage(): void
{
    echo "--- array_is_list() 関数のデモンストレーション ---" . PHP_EOL;
    echo "この関数は、配列が0から始まる連続した整数キーを持つかどうかを判定します。" . PHP_EOL . PHP_EOL;

    // 例1: 0から始まる連続した整数キーを持つ配列(リスト形式)
    $listArray = ['apple', 'banana', 'cherry'];
    echo "配列: ['apple', 'banana', 'cherry']" . PHP_EOL;
    echo "  array_is_list(): " . (array_is_list($listArray) ? 'true' : 'false') . PHP_EOL . PHP_EOL; // 出力: true

    // 例2: 連想配列(リスト形式ではない)
    $associativeArray = ['fruit1' => 'apple', 'fruit2' => 'banana'];
    echo "配列: ['fruit1' => 'apple', 'fruit2' => 'banana']" . PHP_EOL;
    echo "  array_is_list(): " . (array_is_list($associativeArray) ? 'true' : 'false') . PHP_EOL . PHP_EOL; // 出力: false

    // 例3: 空の配列(リスト形式とみなされる)
    $emptyArray = [];
    echo "配列: []" . PHP_EOL;
    echo "  array_is_list(): " . (array_is_list($emptyArray) ? 'true' : 'false') . PHP_EOL . PHP_EOL; // 出力: true

    // 例4: 整数キーだが0から始まらない配列(リスト形式ではない)
    $nonZeroStartArray = [1 => 'dataA', 2 => 'dataB'];
    echo "配列: [1 => 'dataA', 2 => 'dataB']" . PHP_EOL;
    echo "  array_is_list(): " . (array_is_list($nonZeroStartArray) ? 'true' : 'false') . PHP_EOL . PHP_EOL; // 出力: false

    // 例5: 途中にキーが抜けている配列(リスト形式ではない)
    $sparseArray = [0 => 'a', 2 => 'c'];
    echo "配列: [0 => 'a', 2 => 'c']" . PHP_EOL;
    echo "  array_is_list(): " . (array_is_list($sparseArray) ? 'true' : 'false') . PHP_EOL . PHP_EOL; // 出力: false

    // 例6: 整数キーと文字列キーが混在する配列(リスト形式ではない)
    $mixedKeyArray = [0 => 'value1', 'key' => 'value2', 1 => 'value3'];
    echo "配列: [0 => 'value1', 'key' => 'value2', 1 => 'value3']" . PHP_EOL;
    echo "  array_is_list(): " . (array_is_list($mixedKeyArray) ? 'true' : 'false') . PHP_EOL . PHP_EOL; // 出力: false
}

// 関数を実行して結果を表示
demonstrateArrayIsListUsage();

array_is_list関数は、PHP 8で導入された配列の形式を判定する関数です。この関数は、引数として指定されたarray型の配列が「リスト形式」であるかどうかを真偽値(bool)で返します。

「リスト形式」とは、配列のキーが0から始まり、途中に抜けがなく連続した整数キーのみで構成されている状態を指します。例えば、['apple', 'banana', 'cherry'] のような通常の添字配列がこれに該当します。

サンプルコードでは、array_is_list関数の具体的な使用例を示しています。例1のように、0から始まる連続した整数キーを持つ配列はリスト形式と判定されtrueが返されます。また、例3の空の配列[]もリスト形式とみなされtrueを返します。

一方で、例2のような文字列キーを持つ連想配列、例4のように0から始まらない整数キーの配列、例5のように途中にキーが抜けている配列、そして例6のように整数キーと文字列キーが混在する配列は、いずれもリスト形式ではないためfalseが返されます。

この関数を利用することで、配列の構造を簡単に確認し、その後のデータ処理を適切に行うための判断材料として活用できます。

array_is_list()関数は、PHPの配列が0から始まる連続した整数キーを持つ「リスト形式」であるかを厳密に判定します。文字列キーが混在する配列や、キーが途中で飛んでいる配列、あるいは0以外の整数からキーが始まる配列はリストとは見なされません。特に、空の配列[]trueと判定されるため、この点には注意が必要です。この関数は、配列の形式が数値インデックスの順序付きリストとして扱えるかを確認したい場合に便利で、配列の構造を明確にし、意図しない挙動を防ぐために活用できます。

【PHP8.x】array_is_list関数の使い方 | いっしー@Webエンジニア