PHP 7.0.6 Released

array_fill

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

array_fillFill an array with values

Description

array array_fill ( int $start_index , int $num , mixed $value )

Fills an array with num entries of the value of the value parameter, keys starting at the start_index parameter.

Parameters

start_index

The first index of the returned array.

If start_index is negative, the first index of the returned array will be start_index and the following indices will start from zero (see example).

num

Number of elements to insert. Must be greater than or equal to zero.

value

Value to use for filling

Return Values

Returns the filled array

Errors/Exceptions

Throws a E_WARNING if num is less than zero.

Changelog

Version Description
5.6.0 num may now be zero. Previously, num was required to be greater than zero.

Examples

Example #1 array_fill() example

<?php
$a 
array_fill(56'banana');
$b array_fill(-24'pear');
print_r($a);
print_r($b);
?>

The above example will output:

Array
(
    [5]  => banana
    [6]  => banana
    [7]  => banana
    [8]  => banana
    [9]  => banana
    [10] => banana
)
Array
(
    [-2] => pear
    [0] => pear
    [1] => pear
    [2] => pear
)

Notes

See also the Arrays section of manual for a detailed explanation of negative keys.

See Also

User Contributed Notes

csst0266 at cs dot uoi dot gr
11 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.
anatoliy at ukhvanovy dot name
1 year 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
)
mchljnk at NOSPAM dot gmail dot com
2 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.
miguelxpain at gmail dot com
4 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
Anonymous
13 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