(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
array_fill — Fill an array with values
Fills an array with
count entries of the value of the
value parameter, keys starting at the
start_index parameter.
start_indexThe 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 prior to PHP 8.0.0;
as of PHP 8.0.0, negative keys are incremented normally
(see example).
count
Number of elements to insert.
Must be greater than or equal to zero, and less than or equal to 2147483647.
valueValue to use for filling
Returns the filled array
Throws a ValueError if count is
out of range.
| Version | Description |
|---|---|
| 8.0.0 |
array_fill() now throws a ValueError
if count is out of range; previously E_WARNING
was raised, and the function returned false .
|
Example #1 array_fill() example
<?php
$a = array_fill(5, 6, 'banana');
print_r($a);
?>The above example will output:
Array ( [5] => banana [6] => banana [7] => banana [8] => banana [9] => banana [10] => banana )
Example #2 array_fill() example with a negative start index
<?php
$a = array_fill(-2, 4, 'pear');
print_r($a);
?>Output of the above example in PHP 8:
Array ( [-2] => pear [-1] => pear [0] => pear [1] => pear )
Output of the above example in PHP 7:
Array ( [-2] => pear [0] => pear [1] => pear [2] => pear )
Note that index -1 is not present prior to PHP 8.0.0.
See also the Arrays section of manual for a detailed explanation of negative keys.
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.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
)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.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 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 usefullFill 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);
}
?>