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

作成日: 更新日:

array_fill関数は、指定された開始インデックスから、指定された数の要素を持ち、すべての要素が同じ値で埋められた新しい配列を作成して返す関数です。この関数は、特定の数の要素を持つ配列を初期化し、すべてに同じ値を設定したい場合に非常に役立ちます。

この関数には三つの引数を渡します。最初の引数である$start_indexは、作成される配列の最初の要素のインデックス(番号)を整数で指定します。例えば、0を指定すると通常の配列のように0からインデックスが始まります。負の値を指定することも可能です。二つ目の引数である$countは、作成する配列の要素の数を整数で指定します。この数は1以上である必要があります。三つ目の引数である$valueは、作成される配列のすべての要素に設定される値を指定します。この値は数値、文字列、真偽値など、どのような型の値でも構いません。

array_fill関数は、これらの引数に基づいて新しい配列を作成し、その配列を戻り値として返します。例えば、インデックス0から始まり、5つの要素を持ち、すべての要素が「PHP」という文字列で埋められた配列を作成したい場合にこの関数を利用することができます。これにより、配列をループなどで一つずつ初期化する手間を省き、簡潔にコードを記述することが可能になります。

基本的な使い方

構文(syntax)

<?php
$filledArray = array_fill(0, 5, 'exampleValue');

引数(parameters)

int $start_index, int $count, mixed $value

  • int $start_index: 配列の開始インデックスを指定する整数
  • int $count: 生成する配列要素の数を指定する整数
  • mixed $value: 配列に格納する値を指定する混合型

戻り値(return)

array

指定されたキーと値で指定された要素数を持つ配列を生成します。

サンプルコード

PHP array_fill_keysで配列を生成する

<?php

/**
 * array_fill_keys関数の使用例を示します。
 *
 * この関数は、指定された配列の値を新しい配列のキーとして使用し、
 * すべてのキーに同じ値を割り当てた新しい配列を生成します。
 *
 * @param array $keys  新しい配列のキーとして使用する値のリスト。
 *                     これらの値は文字列または整数である必要があります。
 * @param mixed $value 新しい配列のすべての要素に割り当てる値。
 * @return array キーが $keys の要素で、値が $value で埋められた新しい配列。
 */
function illustrateArrayFillKeys(array $keys, mixed $value): array
{
    // array_fill_keys関数を呼び出し、指定されたキーと値で配列を生成します。
    // 例: $keys = ['apple', 'banana'], $value = 'fruit' の場合、
    // 結果は ['apple' => 'fruit', 'banana' => 'fruit'] となります。
    return array_fill_keys($keys, $value);
}

// --- 使用例 ---

// ケース1: 文字列のキーと文字列の値
$productCategories = ['electronics', 'books', 'clothing'];
$defaultStatus = 'available';
$inventoryStatus = illustrateArrayFillKeys($productCategories, $defaultStatus);

echo "--- ケース1: 文字列キーと文字列値 ---\n";
echo "元のキー配列: ";
print_r($productCategories);
echo "共通の値: " . $defaultStatus . "\n";
echo "生成された配列: ";
print_r($inventoryStatus);
/*
期待される出力:
Array
(
    [electronics] => available
    [books] => available
    [clothing] => available
)
*/

echo "\n";

// ケース2: 整数と文字列が混在したキーと数値の値
$userIDs = [101, 'guest_user', 205];
$defaultScore = 0;
$initialScores = illustrateArrayFillKeys($userIDs, $defaultScore);

echo "--- ケース2: 混在キーと数値値 ---\n";
echo "元のキー配列: ";
print_r($userIDs);
echo "共通の値: " . $defaultScore . "\n";
echo "生成された配列: ";
print_r($initialScores);
/*
期待される出力:
Array
(
    [101] => 0
    [guest_user] => 0
    [205] => 0
)
*/

echo "\n";

// ケース3: キー配列に重複する値がある場合
// array_fill_keysは重複するキーを自動的に1つにまとめるため、
// 'apple'が複数あっても結果には1つの'apple'キーのみが含まれます。
$fruitNames = ['apple', 'banana', 'apple', 'orange'];
$isSweet = true;
$fruitSweetness = illustrateArrayFillKeys($fruitNames, $isSweet);

echo "--- ケース3: 重複するキーがある場合 ---\n";
echo "元のキー配列: ";
print_r($fruitNames);
echo "共通の値: " . ($isSweet ? 'true' : 'false') . "\n";
echo "生成された配列: ";
print_r($fruitSweetness);
/*
期待される出力:
Array
(
    [apple] => 1
    [banana] => 1
    [orange] => 1
)
*/

?>

PHPのarray_fill_keys関数は、指定された配列の要素を新しい配列のキーとして使用し、それらのすべてのキーに同じ単一の値を割り当てることで、新しい配列を生成します。

この関数は二つの引数を取ります。最初の引数$keysには、新しい配列のキーとして利用したい値のリストを配列として渡します。この配列の要素は文字列か整数である必要があります。二番目の引数$valueには、生成される配列のすべてのキーに割り当てたい単一の値を指定します。

array_fill_keys関数は、これらの引数をもとに、新しい配列を返します。この戻り値の配列では、$keysで指定された要素がキーとなり、それぞれのキーに対応する値は$valueで指定した値で統一されます。例えば、商品カテゴリのリストをキーとして、すべて「利用可能」というステータスを設定する初期化処理などに便利です。また、$keys配列に重複する値が含まれている場合でも、array_fill_keysは自動的にキーを一つにまとめ、そのキーには指定された$valueが割り当てられます。この関数を使うことで、特定のパターンで初期化された連想配列を簡単に作成できます。

array_fill_keys関数は、第一引数の配列要素を新しい配列の「キー」として利用し、第二引数の値をそのすべてのキーに割り当てる際に使用します。キーとして指定する値は文字列または整数である必要があります。それ以外の型の値が指定された場合、PHPはキーとして扱えるように変換を試みますが、意図しない結果になる可能性があるため注意が必要です。また、第一引数の配列に同じ値が複数含まれる場合、重複するキーは自動的に上書きされ、結果の配列には一意なキーのみが含まれます。この関数は常に新しい配列を返すため、元の配列が変更される心配はありません。

PHP array_fillで指定範囲を値で埋める

<?php

/**
 * array_fill 関数の基本的な使い方を示すサンプルコード。
 * 指定された開始インデックスから、特定の数だけ同じ値で配列を埋めます。
 */
function demonstrateArrayFill(): void
{
    echo "--- array_fill の使用例 ---" . PHP_EOL;

    // 例1: インデックス0から開始し、5つの要素を文字列 'Apple' で埋める
    // array_fill(開始インデックス, 要素数, 埋める値)
    $array1 = array_fill(0, 5, 'Apple');
    echo "例1: インデックス0から開始し、5つの要素を 'Apple' で埋めた配列:\n";
    print_r($array1);
    /* 出力例:
    Array
    (
        [0] => Apple
        [1] => Apple
        [2] => Apple
        [3] => Apple
        [4] => Apple
    )
    */

    echo PHP_EOL;

    // 例2: インデックス3から開始し、3つの要素を数値 123 で埋める
    $array2 = array_fill(3, 3, 123);
    echo "例2: インデックス3から開始し、3つの要素を 123 で埋めた配列:\n";
    print_r($array2);
    /* 出力例:
    Array
    (
        [3] => 123
        [4] => 123
        [5] => 123
    )
    */

    echo PHP_EOL;

    // 例3: マイナスの開始インデックスと、ブール値で配列を埋める
    // マイナスのインデックスはそのままキーとして使用されます。
    $array3 = array_fill(-2, 4, true);
    echo "例3: インデックス-2から開始し、4つの要素を true で埋めた配列:\n";
    print_r($array3);
    /* 出力例:
    Array
    (
        [-2] => 1
        [-1] => 1
        [0] => 1
        [1] => 1
    )
    */
}

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

?>

PHP 8.4のarray_fill関数は、新しい配列を効率的に作成するための機能です。この関数は、指定された開始インデックスから、特定の数だけ同じ値で配列の要素を埋める際に使用します。

引数は3つあります。$start_indexは、配列のキーが始まるインデックスを整数で指定します。この値は負の数でも可能で、その場合も指定された負のインデックスからキーが順に増加します。$countは、作成する配列に含める要素の総数を整数で指定します。そして$valueは、配列のすべての要素に設定される値で、文字列、数値、ブール値など、どのようなデータ型でも指定できます。

この関数は、引数で定義された条件に従って生成された新しい配列を返します。例えば、インデックス0から開始して5つの要素を「Apple」で埋めると、キー0から4までの要素がすべて「Apple」となる配列が生成されます。また、インデックス3から3つの要素を数値の123で埋めると、キー3から5までの要素が123となる配列が得られます。負のインデックスである-2から4つの要素をtrueで埋める例では、キー-2から1までの要素がtrue(PHPでは数値の1と表示されることがあります)となる配列が作成されます。このようにarray_fill関数は、配列を特定の同じ値で初期化したい場合に大変便利です。

array_fill関数は、指定した開始インデックスから指定個数の要素を同じ値で埋めた新しい配列を作成します。引数$countには、必ず1以上の正の整数を指定してください。0や負の数を指定すると、PHP 8.0以降ではValueErrorが発生します。また、$start_indexに負の値を指定すると、インデックスも負の値から連番で生成されますので、キーの扱いに注意が必要です。この関数は常に新しい配列を返します。既存の配列に要素を追加したい場合は別の関数を検討してください。大量の要素を生成する際は、メモリの使用量にも配慮が必要です。

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