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

作成日: 更新日:

array_slice関数は、配列の一部を抽出して新しい配列を作成する関数です。具体的には、指定されたオフセットと長さに基づいて、元の配列から要素を切り出します。元の配列は変更されません。

この関数は、配列の中から特定の部分だけを取り出して処理したい場合に非常に役立ちます。たとえば、配列の最初の5つの要素だけを処理したい場合や、特定の範囲の要素を別の関数に渡したい場合などに使用できます。

array_slice関数は、3つの引数を取ります。最初の引数は、操作対象となる配列です。2番目の引数は、切り出しを開始するオフセット(開始位置)です。オフセットは0から始まる整数で、配列の最初の要素を0として数えます。3番目の引数は、切り出す要素の長さ(個数)です。この引数は省略可能で、省略した場合はオフセットから配列の最後までが切り出されます。

さらに、array_slice関数には、4番目のオプションの引数として、キーを保持するかどうかを指定できます。デフォルトでは、数値キーは0から始まる連番にリセットされますが、この引数をtrueに設定すると、元の配列のキーが保持されます。文字列キーは常に保持されます。

array_slice関数は、配列の操作において基本的な機能であり、データ処理やアルゴリズムの実装など、さまざまな場面で活用できます。配列の一部を効率的に取り出すことで、コードの可読性と保守性を向上させることが可能です。

基本的な使い方

構文(syntax)

array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array

引数(parameters)

array $array, int $offset, ?int $length = null, bool $preserve_keys = false

  • array $array: 対象となる配列
  • int $offset: 切り出しを開始する位置(インデックス)
  • ?int $length = null: 切り出す要素数。省略時は終端まで。
  • bool $preserve_keys = false: キーを保持するかどうか

戻り値(return)

array

指定された配列の一部を切り出した新しい配列を返します。

サンプルコード

PHP array_sliceで連想配列をスライスする

<?php

/**
 * array_slice 関数を使って連想配列の一部を抽出する例を示します。
 * キーの保持/破棄による結果の違いがわかります。
 */
function demonstrateArraySliceAssociative(): void
{
    // サンプルとなる連想配列
    $associativeArray = [
        'apple' => 10,
        'banana' => 20,
        'cherry' => 30,
        'date' => 40,
        'elderberry' => 50,
    ];

    echo "元の連想配列:\n";
    print_r($associativeArray);

    // 1. preserve_keys が false の場合 (デフォルト)
    // 新しい配列では数値インデックスが再構築されます。
    // 'banana'から2要素を抽出します。
    $sliceWithoutPreservingKeys = array_slice($associativeArray, 1, 2, false);
    echo "\n--- preserve_keys = false (デフォルト) の場合 ---\n";
    echo "オフセット1から2要素を抽出 (キーを破棄):\n";
    print_r($sliceWithoutPreservingKeys);

    // 2. preserve_keys が true の場合
    // 元のキーが保持されます。
    // 'cherry'から最後までを抽出します。
    $sliceWithPreservingKeys = array_slice($associativeArray, 2, null, true);
    echo "\n--- preserve_keys = true の場合 ---\n";
    echo "オフセット2から最後までを抽出 (キーを保持):\n";
    print_r($sliceWithPreservingKeys);

    // 3. オフセットが負の数の場合 (末尾からのオフセット)
    // 最後の2要素を抽出し、キーは保持します。
    $sliceFromEnd = array_slice($associativeArray, -2, null, true);
    echo "\n--- オフセットが負の数の場合 ---\n";
    echo "末尾から2要素を抽出 (キーを保持):\n";
    print_r($sliceFromEnd);
}

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

PHPのarray_slice関数は、配列の中から指定した範囲の要素を新しい配列として抽出する際に使用します。この関数は、引数として元の配列 $array、抽出開始位置を示す $offset、抽出する要素数 $length、そしてキーを保持するかどうかを指定する $preserve_keys を受け取ります。

$offset は、抽出を開始する要素の位置を数値で指定します。例えば、1は2番目の要素から開始し、-2は末尾から2番目の要素から開始します。$length は抽出する要素数で、nullを指定すると$offsetから配列の最後までを抽出します。

特に連想配列を扱う場合、$preserve_keys 引数が重要です。この引数を false (デフォルト) にすると、抽出された要素は新しい数値インデックスに再割り当てされます。一方、true に設定すると、元の配列のキーがそのまま保持されます。

サンプルコードでは、まずデフォルトの false の場合、元の 'banana' 'cherry''[0] => 20' '[1] => 30' のように数値キーに変わります。次に true の場合、'cherry' 'date' 'elderberry' の元のキーが保持されたまま抽出されます。最後に、負のオフセットとキー保持を組み合わせ、末尾から2要素 'date' 'elderberry' をキーごと抽出しています。この関数は常に新しい配列を返します。

array_slice関数は、元の配列を変更せずに、指定された範囲の要素を含む新しい配列を返します。特に連想配列に対して使用する際、第四引数preserve_keysの扱いに注意が必要です。この引数がfalse(デフォルト)の場合、抽出された要素のキーは0から始まる数値インデックスに再採番されますので、元のキーを保持したい場合は必ずtrueを指定してください。また、第二引数offsetに負の数を指定すると、配列の先頭からではなく、配列の末尾から数えた位置を始点として要素が抽出されます。これらの引数の挙動を正しく理解し、目的に合わせて適切に設定することが、意図通りの配列操作を行う上で非常に重要です。

PHP array_slice 連想配列を抽出する

<?php

/**
 * array_slice関数の連想配列での使用例を示します。
 * 連想配列のキーがどのように扱われるかに焦点を当てています。
 */
function demonstrateArraySliceWithAssociativeArray(): void
{
    // サンプルとなる連想配列を定義します。
    $associativeArray = [
        'apple'  => 100,
        'banana' => 150,
        'cherry' => 200,
        'date'   => 250,
        'elder'  => 300,
    ];

    echo "元の連想配列:\n";
    print_r($associativeArray);

    echo "\n--- 例1: offset 1 から 3つの要素を抽出 (preserve_keys = false) ---\n";
    // デフォルトでは preserve_keys は false です。
    // 連想配列の文字列キーは、この設定に関わらず常に保持されます。
    // preserve_keys は、元の配列が数値キーの配列である場合にのみ、キーが0から再インデックスされるかどうかに影響します。
    $slice1 = array_slice($associativeArray, 1, 3);
    echo "抽出された配列:\n";
    print_r($slice1);

    echo "\n--- 例2: offset 1 から 3つの要素を抽出 (preserve_keys = true) ---\n";
    // preserve_keys を true に設定すると、元のキーがそのまま保持されます。
    // 連想配列の文字列キーは元々保持されるため、この例では例1と同じ結果になります。
    $slice2 = array_slice($associativeArray, 1, 3, true);
    echo "抽出された配列:\n";
    print_r($slice2);

    echo "\n--- 例3: offset -2 から最後まで抽出 (preserve_keys = true) ---\n";
    // offset に負の数を指定すると、配列の末尾からの位置を示します。
    // -2 は末尾から2番目の要素 ('date') から抽出を開始します。
    // length に null を指定すると、offset から配列の最後までが抽出されます。
    $slice3 = array_slice($associativeArray, -2, null, true);
    echo "抽出された配列:\n";
    print_r($slice3);

    echo "\n--- 例4: offset 0 から 2つの要素を抽出 (preserve_keys = false) ---\n";
    // 配列の先頭から2つの要素を抽出します。
    $slice4 = array_slice($associativeArray, 0, 2);
    echo "抽出された配列:\n";
    print_r($slice4);
}

// array_sliceの動作を確認するために関数を実行します。
demonstrateArraySliceWithAssociativeArray();

PHPのarray_slice関数は、配列の一部を切り出して新しい配列として返すために使用されます。元の配列は変更されずに、新しい配列が戻り値として得られます。この関数は4つの引数を取ります。最初の$arrayは操作対象の配列、次の$offsetは切り出しを開始する位置で、正の値は先頭から、負の値は末尾からの位置を示します。$lengthは切り出す要素の数で、nullを指定すると$offsetから配列の最後までが抽出されます。最後の$preserve_keysは、キーを保持するかどうかを決定する真偽値です。

特に連想配列を扱う場合、$preserve_keysの挙動には注意が必要です。連想配列(文字列キーを持つ配列)では、$preserve_keystrueでもfalseでも、文字列キーは常に保持されます。$preserve_keysが影響するのは、元の配列が数値キーを持つ場合に、そのキーが新しい配列で0から再インデックスされるか、元のキーが保持されるかという点です。

サンプルコードでは、連想配列からarray_sliceを使って要素を抽出する様々な例が示されています。例えば、$offsetを1、$lengthを3として要素を切り出すと、指定された範囲の要素が新しい配列として抽出されます。この際、$preserve_keystrueにしてもfalseにしても、連想配列の文字列キーはそのまま保持されることが確認できます。また、$offsetに負の値を指定することで、配列の末尾から数えて要素を抽出することも可能です。この関数は、抽出された要素を含む新しい配列を返します。

array_slice関数を連想配列に使う際、第4引数preserve_keysの挙動は特に重要です。連想配列の文字列キーは、preserve_keystrueでもfalseでも常に保持されます。この引数は、元の配列が数値キーの配列である場合に、キーが0から再インデックスされるか否かを制御するためのものです。したがって、連想配列を扱う場合は、preserve_keysの値によってキーの扱いが変わることはありませんのでご注意ください。また、offsetに負の数を指定すると配列の末尾からの位置を示すため、抽出開始位置を誤解しないよう注意が必要です。lengthnullにすると、offsetから配列の最後までが抽出されます。これらの点を理解し、安全にコードを利用してください。

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