Array fill: примеры (PHP)

Руководство по применению array_fill для заполнения массивов
Раздел: Работа с массивами
array_fill(int $start_index, int $count, mixed $value): array

Функция array_fill() создает и возвращает массив, заполненный одинаковыми значениями. Она используется, когда нужно инициализировать массив определенного размера одним значением, например, для создания заглушек, подготовки структуры данных или сброса значений.

Синтаксис
array_fill(int $start_index, int $count, mixed $value): array

Функция принимает три аргумента:

  • $start_index (int): Первый ключ возвращаемого массива. Если значение отрицательное, первым ключом будет оно, а последующие увеличатся.
  • $count (int): Количество элементов для вставки. Должно быть больше или равно нулю. Если равно нулю, функция вернет пустой массив.
  • $value (mixed): Значение для заполнения массива. Может быть любого типа.
Основные примеры
Создание простого массива
$array = array_fill(0, 5, 'test');
print_r($array);
Array
(
    [0] => test
    [1] => test
    [2] => test
    [3] => test
    [4] => test
)
Отрицательный начальный индекс
$array = array_fill(-3, 4, 'value');
print_r($array);
Array
(
    [-3] => value
    [-2] => value
    [-1] => value
    [0] => value
)
Заполнение числовыми и другими типами
$numArray = array_fill(5, 3, 42);
$boolArray = array_fill(0, 2, true);
$nullArray = array_fill(1, 2, null);

print_r($numArray);
print_r($boolArray);
print_r($nullArray);
Array
(
    [5] => 42
    [6] => 42
    [7] => 42
)
Array
(
    [0] => 1
    [1] => 1
)
Array
(
    [1] => 
    [2] => 
)
Количество элементов равное нулю
$array = array_fill(10, 0, 'any');
var_dump($array);
array(0) {
}
Похожие функции в PHP
  • array_fill_keys() - Создает массив, заполняя его значениями, используя другой массив для определения ключей. Удобно, когда нужно задать одинаковое значение для набора известных ключей.
    $keys = ['a', 'b', 'c'];
    $filled = array_fill_keys($keys, 'default');
    print_r($filled);
    Array
    (
        [a] => default
        [b] => default
        [c] => default
    )
  • Циклы (for, foreach) и array_pad(). Циклы предлагают большую гибкость при сложной логике заполнения. Функция array_pad() дополняет существующий массив до нужной длины значением, а не создает новый с нуля.
  • array_map() с анонимной функцией. Может имитировать заполнение, но менее эффективно для простых случаев.

array_fill() предпочтительнее при создании нового массива фиксированной длины с одним значением. array_fill_keys() используют, если ключи не являются последовательными числами.

Типичные ошибки
Отрицательное количество элементов
$array = array_fill(0, -2, 'val');
var_dump($array);
Warning: array_fill(): Argument #2 ($count) must be greater than or equal to 0
Неправильный тип аргумента
$array = array_fill('first', 3, 'val'); // Строка вместо int
var_dump($array);
Warning: array_fill(): Argument #1 ($start_index) must be of type int
Большой размер массива
// Попытка создать очень большой массив может исчерпать память.
// $hugeArray = array_fill(0, 1000000000, 'data'); // Осторожно!
Заполнение массива объектами

Все элементы ссылаются на один и тот же объект, что может быть неожиданно.

class Item {}
$array = array_fill(0, 2, new Item());
$array[0]->prop = 'changed';
print_r($array[1]->prop); // Свойство изменилось и у второго элемента
changed
Изменения в PHP
  • В PHP 8.0 сигнатура функции была приведена к виду с явными типами аргументов (int $start_index, int $count, mixed $value). Передача аргументов несовместимого типа теперь вызывает TypeError, а не предупреждение.
  • До PHP 8.0 некорректные типы аргументов приводились с генерацией предупреждений.
Расширенные примеры
Создание многомерной структуры

Можно комбинировать с array_map для создания массива массивов.

Пример php
// Создание матрицы 3x3, заполненной нулями
$matrix = array_fill(0, 3, array_fill(0, 3, 0));
print_r($matrix);
Array
(
    [0] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
        )
    [1] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
        )
    [2] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
        )
)
Подготовка данных для гистограммы
Пример php
// Инициализация счетчиков для диапазонов от 0 до 9
$counters = array_fill(0, 10, 0);
$data = [2, 5, 2, 8, 9, 5, 2];
foreach ($data as $value) {
    if ($value >= 0 && $value < 10) {
        $counters[$value]++;
    }
}
print_r($counters);
Array
(
    [0] => 0
    [1] => 0
    [2] => 3
    [3] => 0
    [4] => 0
    [5] => 2
    [6] => 0
    [7] => 0
    [8] => 1
    [9] => 1
)
Генерация шаблонных данных с уникальными объектами

Чтобы избежать проблемы с одним объектом, используют array_map.

Пример php
class Point {
    public $x = 0;
    public $y = 0;
}
// Создание массива из 3 различных объектов
$points = array_map(function() { return new Point(); }, array_fill(0, 3, null));
$points[0]->x = 10;
echo $points[1]->x; // 0, потому что это другой объект
0
Имитация поведения range с шагом
Пример php
// Создание массива [10, 12, 14, 16, 18]
$start = 10;
$step = 2;
$count = 5;
$array = array_map(fn($i) => $start + $i * $step, array_fill(0, $count, 0));
// Альтернативно через array_keys
$array = array_map(fn($k) => $start + $k * $step, array_keys(array_fill(0, $count, null)));
print_r($array);
Array
(
    [0] => 10
    [1] => 12
    [2] => 14
    [3] => 16
    [4] => 18
)
Аналоги в других языках

Array fill в Python

Используют оператор умножения для списков или метод repeat() из модуля itertools.

# Список
arr = ['value'] * 5
print(arr)  # ['value', 'value', 'value', 'value', 'value']

# С помощью range и for (для избегания ссылок на один объект)
arr = ['value' for _ in range(5)]
print(arr)
['value', 'value', 'value', 'value', 'value']
['value', 'value', 'value', 'value', 'value']

Array fill в Javascript

Методы Array().fill() или комбинация Array() и map().

// Метод fill
let arr1 = new Array(5).fill('test');
console.log(arr1); // ['test', 'test', 'test', 'test', 'test']

// Array.from
let arr2 = Array.from({length: 5}, () => 'value');
console.log(arr2);
['test', 'test', 'test', 'test', 'test']
['value', 'value', 'value', 'value', 'value']

Array fill в MySQL

Прямого аналога нет, но можно генерировать последовательности через системные таблицы или рекурсивные CTE (в MySQL 8.0+).

-- Генерация пяти строк со значением 'constant'
WITH RECURSIVE seq AS (
    SELECT 1 AS n
    UNION ALL
    SELECT n + 1 FROM seq WHERE n < 5
)
SELECT 'constant' AS val FROM seq;
val
constant
constant
constant
constant
constant

Отличие PHP-функции в явном указании начального индекса, что дает контроль над ключами массива.

PHP array_fill function comments

En
Array fill Fill an array with values