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

作成日: 更新日:

array_unshift関数は、配列の先頭に一つまたは複数の要素を追加する関数です。既存の配列のキーを数値的に振り直すのではなく、そのまま保持します。この関数は、配列を直接変更し、変更後の配列の要素数を返します。

具体的には、第一引数に配列を、第二引数以降に追加したい要素を渡します。複数の要素を渡した場合、それらは引数で指定した順に配列の先頭に追加されます。元の配列が連想配列(キーが文字列の配列)の場合、キーは保持されますが、数値キーは0から始まる新しい連番に置き換えられます。

array_unshift関数は、配列の先頭にデータを追加する必要がある場合に役立ちます。例えば、キュー(待ち行列)のようなデータ構造を実装する際に、新しい要素を先頭に追加する処理などに利用できます。

ただし、大きな配列に対して多数の要素をarray_unshift関数で追加すると、処理に時間がかかる可能性があります。これは、既存の要素をすべて後ろにずらす必要があるためです。パフォーマンスが重要な場合は、他のデータ構造やアルゴリズムを検討する方が良い場合があります。

array_unshift関数は、配列を操作する上で基本的な関数の一つであり、PHPプログラミングにおいて頻繁に使用されます。配列の操作を理解する上で、この関数の挙動を把握しておくことは重要です。

基本的な使い方

構文(syntax)

array_unshift(array &$array, mixed ...$values): int

引数(parameters)

array &$array, mixed ...$values

PHP:

  • array &$array: 配列への参照。この配列の先頭に要素が追加されます。
  • mixed ...$values: 配列の先頭に追加する1つ以上の要素。

戻り値(return)

int

array_unshift関数は、配列の先頭に要素を追加した結果、配列にいくつの要素が追加されたかを整数で返します。

サンプルコード

PHP array_unshift で多次元配列を操作する

<?php

/**
 * array_unshift の多次元配列での使用例を示します。
 *
 * この関数は、既存の多次元配列の先頭に新しい要素(この例では別の配列)を追加し、
 * その結果と新しい配列の要素数を標準出力に表示します。
 */
function demonstrateArrayUnshiftWithMultidimensional(): void
{
    // 初期状態の多次元配列を定義します。
    $products = [
        ['id' => 101, 'item' => 'Product A', 'price' => 100],
        ['id' => 202, 'item' => 'Product B', 'price' => 250],
    ];

    echo "--- 元の多次元配列 ---" . PHP_EOL;
    print_r($products);
    echo PHP_EOL;

    // 配列の先頭に追加する新しい要素(別の配列)を定義します。
    $newProduct = [
        'id' => 303,
        'item' => 'Product C',
        'price' => 150
    ];

    echo "--- 追加する単一の要素 ---" . PHP_EOL;
    print_r($newProduct);
    echo PHP_EOL;

    // array_unshift を使用して、多次元配列の先頭に新しい要素を追加します。
    // array_unshift は最初の引数(&$array)を「参照渡し」で受け取るため、
    // $products 配列自体が変更されます。
    // 戻り値は、操作後の配列の新しい要素数(int型)です。
    $newCount = array_unshift($products, $newProduct);

    echo "--- array_unshift 実行後の多次元配列 ---" . PHP_EOL;
    echo "追加後の配列の要素数: " . $newCount . PHP_EOL;
    print_r($products);
    echo PHP_EOL;

    // 複数の要素を一度に追加する例
    echo "--- 複数の要素を一度に追加する例 ---" . PHP_EOL;

    $orders = [
        ['order_id' => 1, 'customer' => 'Alice'],
        ['order_id' => 2, 'customer' => 'Bob'],
    ];

    echo "元の配列:" . PHP_EOL;
    print_r($orders);
    echo PHP_EOL;

    $newOrder1 = ['order_id' => 3, 'customer' => 'Charlie'];
    $newOrder2 = ['order_id' => 4, 'customer' => 'David'];

    echo "追加する複数の要素:" . PHP_EOL;
    print_r($newOrder1);
    print_r($newOrder2);
    echo PHP_EOL;

    // array_unshift は可変長引数(...$values)を受け取るため、複数の要素を一度に追加できます。
    // 引数に指定された順序で配列の先頭に挿入されます。($newOrder1 が一番先頭、次に $newOrder2)
    $newCountMultiple = array_unshift($orders, $newOrder1, $newOrder2);

    echo "array_unshift (複数の要素) 実行後の配列:" . PHP_EOL;
    echo "追加後の配列の要素数: " . $newCountMultiple . PHP_EOL;
    print_r($orders);
    echo PHP_EOL;
}

// 関数を実行して、array_unshift の動作を確認します。
demonstrateArrayUnshiftWithMultidimensional();

PHPのarray_unshift関数は、既存の配列の先頭に一つ以上の要素を追加する際に使用します。この関数は、最初の引数である$arrayを「参照渡し」で受け取るため、元の配列自体が直接変更されます。追加したい要素は$valuesとして複数指定することが可能で、引数に指定された順序で配列の先頭に挿入されます。関数は、操作後の配列の新しい要素数を整数(int)で返します。

このサンプルコードは、array_unshiftが多次元配列に対してどのように動作するかを示しています。最初に、商品情報を格納する多次元配列$productsを用意し、その先頭に新しい商品の配列$newProductを追加する例を紹介しています。array_unshiftの実行後には$products配列の先頭に$newProductが追加され、追加後の配列の要素数が表示されます。さらに、複数の注文情報を一度に配列の先頭へ追加する例も含まれており、$newOrder1$newOrder2の順で$orders配列の先頭に挿入される様子が確認できます。これにより、既存の配列の先頭に効率的に要素を追加し、その結果を確認できることがわかります。

PHPのarray_unshift関数は、指定された配列の先頭に要素を追加する際、元の配列を「参照渡し」で直接変更します。新しい配列が返されるわけではない点にご注意ください。戻り値は、操作後の配列の新しい要素数(整数)となります。多次元配列に対しても利用でき、追加する要素が配列であっても同様に動作します。複数の要素を一度に追加することも可能で、その際は引数に指定された順序(左から右へ)で配列の先頭に挿入されます。したがって、引数の一番左に指定した要素が、最終的に配列の一番先頭に配置されます。

PHP array_unshiftで連想配列を操作する

<?php

/**
 * array_unshift関数の動作を示すサンプルコードです。
 *
 * array_unshift関数は、指定された配列の先頭に一つまたは複数の要素を追加します。
 * 追加された要素には数値キーが割り当てられ、既存の数値キーの要素は再インデックスされます。
 * 既存の文字列キー(連想配列のキー)は変更されず保持されます。
 * 関数は新しい配列の要素数を返します。
 */

// 最初に定義する連想配列
$associativeArray = [
    'fruit' => 'banana',
    'color' => 'yellow',
    'origin' => 'Ecuador',
];

echo "--- 初期状態の配列 ---\n";
print_r($associativeArray);

// array_unshiftを使って配列の先頭に新しい要素を追加します
// この例では、連想配列に数値キーの要素が追加され、既存の連想キーはそのまま残ります。
// array_unshiftは追加された要素に0からの数値キーを割り当てます。
$newCount = array_unshift($associativeArray, 'apple', 'red');

echo "\n--- array_unshift実行後の配列 ---\n";
print_r($associativeArray);

echo "新しい配列の要素数: " . $newCount . "\n";

echo "\n--- 別の連想配列での挙動(数値キーが混在する場合) ---\n";
$mixedArray = [
    'first_item' => 'a',
    0 => 'b', // 数値キー
    'third_item' => 'c',
    1 => 'd', // 数値キー
];

echo "--- 初期状態の混在配列 ---\n";
print_r($mixedArray);

// array_unshiftで要素を追加
// 既存の文字列キー('first_item', 'third_item')は保持されます。
// 既存の数値キー(0, 1)は再インデックスされ、新しい要素に0からの数値キーが割り当てられます。
$newCountMixed = array_unshift($mixedArray, 'new_start_1', 'new_start_2');

echo "\n--- array_unshift実行後の混在配列 ---\n";
print_r($mixedArray);
echo "新しい配列の要素数: " . $newCountMixed . "\n";

?>

PHPのarray_unshift関数は、指定された配列の先頭に一つまたは複数の要素を追加する機能を提供します。最初の引数$arrayには操作対象の配列を渡します。この引数は参照渡しのため、関数が実行されると元の配列自体が直接変更されます。続く引数$valuesには、配列の先頭に追加したい要素を必要なだけ指定できます。関数は、要素追加後の配列の新しい要素数を整数値で返します。

この関数の重要な挙動として、追加される要素には0から始まる数値キーが割り当てられます。もし元の配列に数値キーの要素が含まれていた場合、それらは新しい要素の追加に伴い自動的に再インデックス(キーが振り直される)されます。特に連想配列の場合、既存の文字列キーを持つ要素はそのキーと値が変更されずに保持されます。これにより、連想配列の構造を保ちつつ、先頭に数値キーの新しい要素を追加できます。サンプルコードでは、連想配列の先頭に新たな要素が数値キーで追加され、元の連想キーが維持される挙動と、数値キーが混在する配列での再インデックスの様子が確認できます。

array_unshift関数は、連想配列の先頭に要素を追加する際、追加された要素に0から始まる数値キーを割り当てます。このとき、既存の文字列キーは変更されずに保持されますが、既存の数値キーを持つ要素はすべて再インデックス(0から振り直し)されます。そのため、数値キーで要素を直接参照しているコードがある場合は、予期せぬ挙動に繋がる可能性がありますので特に注意が必要です。また、第一引数の配列は参照渡しのため、関数実行後に元の配列が直接変更されます。戻り値は変更後の配列の要素数であり、変更された配列自体が返されるわけではありません。配列の先頭への要素追加は、既存要素のシフトが必要なため、要素数が多い配列ではパフォーマンスが低下する場合があります。

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