array_fill()
(PHP 4 >= 4.2.0, PHP 5, PHP 7)
用给定的值填充数组
说明
array_fill(int $start_index,int $num,mixed $value): array
array_fill()用$value参数的值将一个数组填充$num个条目,键名由$start_index参数指定的开始。
参数
- $start_index
返回的数组的第一个索引值。
如果$start_index是负数,那么返回的数组的第一个索引将会是$start_index,而后面索引则从0开始。(参见例子)。
- $num
插入元素的数量。必须大于或等于 0。
- $value
用来填充的值。
返回值
返回填充后的数组。
错误/异常
如果$num小于零,将会抛出E_WARNING
。
更新日志
版本 | 说明 |
---|---|
5.6.0 | $num现在可以是零。之前$num必须大于零。 |
范例
Example #1array_fill()例子
<?php $a = array_fill(5, 6, 'banana'); $b = array_fill(-2, 4, 'pear'); print_r($a); print_r($b); ?>
以上例程会输出:
Array ( [5] => banana [6] => banana [7] => banana [8] => banana [9] => banana [10] => banana ) Array ( [-2] => pear [0] => pear [1] => pear [2] => pear )
注释
参见手册上数组一节里关于负数的键的详细解释。
参见
array_fill_keys()
使用指定的键和值填充数组str_repeat()
重复一个字符串range()
根据范围创建数组,包含指定的元素
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.
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
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); } ?>
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.