array_fill

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

array_fillЗаполняет массив значениями

Описание

array_fill(int $start_index, int $count, mixed $value): array

Заполняет массив заданным в параметре count количеством записей значения value, начиная индексацию с ключа start_index.

Список параметров

start_index

Первый индекс возвращаемого массива.

Если начальный ключ start_index будет отрицательным, первым индексом возвращаемого массива будет значение этого отрицательного ключа (start_index), а следующие индексы будут начинаться с нуля до PHP 8.0.0; начиная с PHP 8.0.0 отрицательные ключи увеличиваются нормально (смотрите пример).

count

Количество добавляемых элементов. Должно быть больше или равно нулю и меньше или равно 2 147 483 647.

value

Значение для заполнения.

Возвращаемые значения

Возвращает заполненный массив.

Ошибки

Выбрасывает исключение ValueError, если параметр count выходит за пределы диапазона.

Список изменений

Версия Описание
8.0.0 Функция array_fill() теперь выбрасывает исключение ValueError, если параметр count выходит за пределы диапазона; ранее выдавалась ошибка уровня E_WARNING, а функция возвращала значение false.

Примеры

Пример #1 Пример использования функции array_fill()

<?php

$a
= array_fill(5, 6, 'банан');
print_r($a);
?>

Результат выполнения приведённого примера:

Array
(
    [5]  => банан
    [6]  => банан
    [7]  => банан
    [8]  => банан
    [9]  => банан
    [10] => банан
)

Пример #2 Пример использования функции array_fill() с отрицательным начальным индексом

<?php

$a
= array_fill(-2, 4, 'груша');
print_r($a);
?>

Результат выполнения приведённого примера в PHP 7:

Array
(
    [-2] => груша
    [0] => груша
    [1] => груша
    [2] => груша
)

Результат выполнения приведённого примера в PHP 8:

Array
(
    [-2] => груша
    [-1] => груша
    [0] => груша
    [1] => груша
)

Обратите внимание, вывод до PHP 8.0.0 не содержит индекс -1.

Примечания

Подробное описание отрицательных ключей дано в разделе «Массивы».

Смотрите также

  • array_fill_keys() - Создаёт массив и заполняет его значениями с определёнными ключами
  • str_repeat() - Возвращает повторяющуюся строку
  • range() - Создаёт массив, содержащий диапазон элементов

add a note add a note

User Contributed Notes 7 notes

up
82
csst0266 at cs dot uoi dot gr
20 years ago
This is what I recently did to quickly create a two dimensional array (10x10), initialized to 0:

<?php
  $a
= array_fill(0, 10, array_fill(0, 10, 0));
?>

This should work for as many dimensions as you want, each time passing to array_fill() (as the 3rd argument) another array_fill() function.
up
44
anatoliy at ukhvanovy dot name
10 years ago
If you need negative indices:
<?php
$b
= array_fill(-2, 4, 'pear');//this is not what we want
$c = array_fill_keys(range(-2,1),'pear');//these are negative indices
print_r($b);
print_r($c);
?>
Here is result of the code above:
Array
(
    [-2] => pear
    [0] => pear
    [1] => pear
    [2] => pear
)
Array
(
    [-2] => pear
    [-1] => pear
    [0] => pear
    [1] => pear
)
up
29
mchljnk at NOSPAM dot gmail dot com
10 years ago
Using objects with array_fill may cause unexpected results. Consider the following:

<?php
class Foo {
   public
$bar = "banana";
}

//fill an array with objects
$array = array_fill(0, 2, new Foo());

var_dump($array);
/*
array(2) {
  [0]=>
  object(Foo)#1 (1) {
    ["bar"]=>
    string(6) "banana"
  }
  [1]=>
  object(Foo)#1 (1) {
    ["bar"]=>
    string(6) "banana"
  }
} */

//now we change the attribute of the object stored in index 0
//this actually changes the attribute for EACH object in the ENTIRE array
$array[0]->bar = "apple";

var_dump($array);
/*
array(2) {
  [0]=>
  object(Foo)#1 (1) {
    ["bar"]=>
    string(5) "apple"
  }
  [1]=>
  object(Foo)#1 (1) {
    ["bar"]=>
    string(5) "apple"
  }
}
*/
?>

Objects are filled in the array BY REFERENCE. They are not copied for each element in the array.
up
2
user at NOSPAM dot example dot com
3 years ago
As of PHP 8.0 the example code

<?php
$b
= array_fill(-2, 4, 'pear');
print_r($b);
?>

now returns

Array
(
    [-2] => pear
    [-1] => pear
    [0] => pear
    [1] => pear
)

See https://wiki.php.net/rfc/negative_array_index and https://github.com/php/php-src/pull/3772
up
2
miguelxpain at gmail dot com
12 years ago
I made this function named "array_getMax" that returns te maximum value and index, from array:

<?php
//using array_search_all by helenadeus at gmail dot com

function array_search_all($needle, $haystack)
{
#array_search_match($needle, $haystack) returns all the keys of the values that match $needle in $haystack

   
foreach ($haystack as $k=>$v) {
  
        if(
$haystack[$k]==$needle){
      
          
$array[] = $k;
        }
    }
    return (
$array);

  
}

function
array_getMax($array){
       
   
$conteo=array_count_values($array);
   
    if(
count($conteo)==1 ){//returns full array when all values are the same.
       
return  $array;      
    }
      
   
arsort($array);
   
   
//$antValue=null;
   
$maxValue=null;
   
$keyValue=null;
    foreach(
$array as $key=>$value){
        if(
$maxValue==null){
           
$maxValue=$value;
           
$keyValue=$key;
            break;
        }       
    }
   
   
$resultSearch=array_search_all($maxValue, $array);
       
   return 
array_fill_keys($resultSearch, $maxValue);
   
   
}

//example
 
$arreglo=array('e1'=>99,'e2'=>'99','e3'=>1,'e4'=>1,'e5'=>98);
   
   
var_dump(array_getMax($arreglo));

//output
/*
array(2) {
  ["e1"]=>
  int(99)
  ["e2"]=>
  int(99)
}
*/
?>

I hope some one find this usefull
up
-2
Hayley Watson
6 years ago
Fill missing keys in a (numerically-indexed) array with a default value

<?php

function fill_missing_keys($array, $default = null, $atleast = 0)
{
    return
$array + array_fill(0, max($atleast, max(array_keys($array))), $default);
}

?>
up
-27
Anonymous
22 years ago
array_fill() cannot be used to setup only missing keys in an array. This  may be necessary for example before using implode()  on a sparse filled array.
The solution is to use this function:

<?php
function array_setkeys(&$array, $fill = NULL) {
 
$indexmax = -1;
  for (
end($array); $key = key($array); prev($array)) {
    if (
$key > $indexmax)
     
$indexmax = $key;
  }
  for (
$i = 0; $i <= $indexmax; $i++) {
    if (!isset(
$array[$i]))
     
$array[$i] = $fill;
  }
 
ksort($array);
}
?>

This is usefull in some situations where you don't know which key index was filled and you want to preserve the association between a positioned field in an imploded array and the key index when exploding it.
To Top