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

作成日: 更新日:

array_fill_keys関数は、指定されたキーの配列と、それら全てのキーに割り当てる単一の値を使用して、新しい配列を作成する関数です。この関数は、複数の要素を持つ新しい配列を、同じ値で初期化したい場合に特に便利です。

最初の引数には、新しい配列のキーとして使用したい要素を持つ配列を渡します。例えば、['apple', 'banana', 'orange']といった文字列の配列や、[10, 20, 30]といった整数の配列を指定できます。PHPでは配列のキーは文字列または整数であるため、渡された配列の要素がこれら以外の型であった場合は、PHPが自動的に適切な型に変換してキーとして使用します。

二番目の引数には、生成される新しい配列の全てのキーに割り当てる値を指定します。この値は、文字列、数値、真偽値、オブジェクト、nullなど、PHPで扱えるあらゆるデータ型が可能です。

この関数は、最初の引数で指定された各要素をキーとし、二番目の引数で指定された単一の値をそのキーに対応する値として持つ、新しい連想配列を返します。例えば、array_fill_keys(['a', 'b'], 100)を実行すると、['a' => 100, 'b' => 100]という配列が生成されます。

array_fill_keys関数は、複数の設定項目に一律の初期値を設定したい場合や、データの集計を行う前に特定のキーを持つ初期値を準備したい場合などに、コードの記述量を減らし、可読性を高める効果があります。簡潔に、決まったキーに対して同じ値を設定する配列を効率的に作成するための関数として利用されます。

基本的な使い方

構文(syntax)

<?php
$keys = ['user_id', 'username', 'email'];
$value_to_assign = 'default';

$new_array = array_fill_keys($keys, $value_to_assign);

引数(parameters)

array $keys, mixed $value

  • array $keys: 新しい配列のキーとなる要素の配列。
  • mixed $value: 新しい配列のすべてのキーに割り当てられる値。

戻り値(return)

array

指定されたキーと値を配列に格納した新しい配列を返します。

サンプルコード

array_fill_keysで多次元配列を作成する

<?php

/**
 * array_fill_keys 関数を使用して、指定されたキー配列に同じ値を割り当て、
 * 特に「多次元」のキーワードを考慮して、割り当てる値を配列にする例です。
 * これにより、生成される配列は多次元構造を持ちます。
 *
 * @return void
 */
function createMultidimensionalArrayUsingFillKeys(): void
{
    // 配列のキーとして使用する文字列のリスト
    $product_codes = ['P001', 'P002', 'P003'];

    // 各キーに割り当てる値。これが内部配列となり、結果として多次元配列が生成されます。
    $default_product_details = [
        'name'  => 'Unknown Product',
        'price' => 0.00,
        'stock' => 0,
        'active' => false,
    ];

    // array_fill_keys を使用して、各製品コードに同じデフォルト詳細情報を割り当てる
    // $product_codes がキーとなり、$default_product_details が値として設定される
    $products_data = array_fill_keys($product_codes, $default_product_details);

    echo "--- 生成された多次元配列 ---" . PHP_EOL;
    print_r($products_data);

    echo PHP_EOL . "--- 特定の要素へのアクセス例 ---" . PHP_EOL;
    echo "製品P001の名前: " . $products_data['P001']['name'] . PHP_EOL;
    echo "製品P002の在庫: " . $products_data['P002']['stock'] . PHP_EOL;

    // 後から特定の製品の詳細を更新することも可能
    $products_data['P001']['name'] = 'High-End Widget';
    $products_data['P001']['price'] = 99.99;
    $products_data['P001']['stock'] = 50;
    $products_data['P001']['active'] = true;

    echo PHP_EOL . "--- 更新後の製品P001の詳細 ---" . PHP_EOL;
    print_r($products_data['P001']);
}

// 関数を実行して動作を確認
createMultidimensionalArrayUsingFillKeys();

?>

array_fill_keys関数は、指定したキーの配列に対して、すべて同じ値を割り当てて新しい配列を生成するPHPの関数です。最初の引数$keysには、新しく作る配列のキーとして使用したい値のリストを配列で渡します。2番目の引数$valueには、これらのキーすべてに割り当てたい値を指定します。この関数は、生成された新しい配列を戻り値として返します。

このサンプルコードでは、array_fill_keys関数を使用して、複数の製品コードを一括で管理する多次元配列を作成しています。$product_codes配列が新しい配列のキーとなり、それぞれのキーに対して$default_product_details配列が値として割り当てられています。$valueに配列を渡すことで、結果として「P001」などのキーの下に「name」や「price」といった詳細情報を持つ、入れ子になった多次元配列が効率的に生成されます。

このようにして作成された$products_data配列は、$products_data['P001']['name']のようにキーを重ねて指定することで、特定の製品の詳細情報に直接アクセスできます。また、必要に応じて$products_data['P001']['name'] = 'High-End Widget';のように値を更新することも容易に行えます。これにより、初期値を持つ複雑なデータ構造を簡潔に構築し、その後の管理も柔軟に行えるようになります。

array_fill_keys関数は、指定されたキー配列の各要素を新しい配列のキーとし、渡された値をそのキーに割り当てます。サンプルコードのように、割り当てる値(第2引数)に配列を指定すると、結果として多次元配列を効率的に生成できます。

この関数を使う際の最も重要な注意点は、割り当てられる値が各キーに対してコピーされる点です。つまり、一つのキーに割り当てられた多次元配列の一部を変更しても、他のキーに割り当てられた同じ構造の配列には影響しません。各キーの値が独立していることを理解して利用してください。参照渡しではないため、この挙動は初心者が誤解しやすいポイントです。

また、キーとして使用する配列に重複する要素がある場合、後に出現する要素の値が優先され上書きされます。意図しないデータの上書きを防ぐため、キー配列の内容を確認してから使用しましょう。

PHP: array_fill_keysで配列を生成する

<?php

/**
 * array_fill_keys 関数の基本的な使用方法を示します。
 *
 * この関数は、指定された配列の値を新しい配列のキーとして使用し、
 * それら全てのキーに指定された同じ値を割り当てた新しい連想配列を作成します。
 *
 * システムエンジニアを目指す初心者が、特定のキーセットに対して
 * デフォルト値を設定した配列を効率的に生成する際に役立ちます。
 */
function create_and_fill_array_with_keys(): void
{
    // 例1: ユーザー設定のデフォルト値を作成する
    // 新しい配列のキーとして使用したい設定項目名のリストを定義します。
    $settingKeys = ['username', 'email', 'language', 'theme'];

    // これらのキーに割り当てるデフォルト値を定義します。
    $defaultValue = 'N/A'; // 未設定の場合のデフォルト値

    // array_fill_keys() を使用して、新しい連想配列を作成します。
    // $settingKeys の各要素が新しい配列のキーとなり、
    // $defaultValue がそれらのキーに割り当てられる値となります。
    $userSettingsTemplate = array_fill_keys($settingKeys, $defaultValue);

    echo "--- array_fill_keys を使用したデフォルト設定配列の作成 ---\n";
    echo "作成された配列:\n";
    print_r($userSettingsTemplate);

    /*
    上記のコードを実行すると、以下の出力が得られます:
    Array
    (
        [username] => N/A
        [email] => N/A
        [language] => N/A
        [theme] => N/A
    )
    */

    echo "\n--- 別の例: 商品の初期在庫数を設定 ---\n";
    // 新しい配列のキーとして使用したい商品IDのリストを定義します。
    $productIds = [101, 102, 103, 104];
    // これらのキーに割り当てる値 (初期在庫数) を0とします。
    $initialStockCount = 0;

    // 商品IDをキーとし、初期在庫数を値とする配列を作成します。
    $productStocks = array_fill_keys($productIds, $initialStockCount);

    echo "作成された商品在庫配列:\n";
    print_r($productStocks);

    /*
    上記のコードを実行すると、以下の出力が得られます:
    Array
    (
        [101] => 0
        [102] => 0
        [103] => 0
        [104] => 0
    )
    */
}

// 関数を実行し、array_fill_keys の動作を確認します。
create_and_fill_array_with_keys();

?>

PHP 8.4のarray_fill_keys関数は、指定された配列の要素を新しい配列のキーとして使用し、それら全てのキーに同じ値を割り当てた連想配列を効率的に生成します。システムエンジニアを目指す初心者にとって、特定のキーセットに対してデフォルト値を一括で設定する際に非常に便利な機能です。

この関数は二つの引数を取ります。一つ目の$keys引数には、新しい配列のキーとして使用したい要素を含む配列を渡します。二つ目の$value引数には、これらのキーに割り当てたい任意の単一の値を指定します。関数は、指定されたキーと値で構成される新しい連想配列を戻り値として返します。

サンプルコードの最初の例では、['username', 'email', 'language', 'theme']というキーのリストに対し、デフォルト値として'N/A'を割り当てたユーザー設定テンプレート配列を作成しています。これにより、全ての項目が初期値を持つ配列を簡単に用意できます。また、二つ目の例では、[101, 102, 103, 104]といった商品IDをキーとし、初期在庫数0を値として設定した商品在庫配列を生成しています。このように、既知のキー群に対して共通の初期値を設定したい場合に、手動でキーと値を一つずつ定義する手間を省き、コードの可読性と保守性を向上させることができます。

array_fill_keys関数は、指定したキーと値で新しい配列を効率的に作成します。引数$keysの要素は、文字列または整数である必要があります。それ以外の型が渡された場合、PHPはキーを文字列に変換しようとしますが、意図しない結果を招くことがありますので注意が必要です。また、$value引数にオブジェクトを渡した場合、生成される配列の全てのキーは同じオブジェクトインスタンスを参照します。そのため、一つのキーの値を通じてオブジェクトの状態を変更すると、他の全てのキーの値も影響を受ける点にご留意ください。この関数は常に新しい配列を生成し、既存の配列は変更しません。$keys配列内に重複する要素があっても、結果の配列には一意のキーが作成されます。

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