©
本文档使用
php.cn手册 发布
(PHP 4 >= 4.2.0, PHP 5, PHP 7)
array_fill — 用给定的值填充数组
$start_index
, int $num
, mixed $value
) array_fill() 用 value
参数的值将一个数组填充 num
个条目,键名由
start_index
参数指定的开始。
start_index
返回的数组的第一个索引值。
如果 start_index
是负数,
那么返回的数组的第一个索引将会是
start_index
,而后面索引则从0开始。
(参见 例子)。
num
插入元素的数量。 必须大于 0。
value
用来填充的值。
返回填充后的数组。
如果 num
少于一个,将会抛出 E_WARNING
。
Example #1 array_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 )
参见手册上 数组 一节里关于负数的键的详细解释。
[#1] anatoliy at ukhvanovy dot name [2014-06-16 10:00:46]
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
)
[#2] mchljnk at NOSPAM dot gmail dot com [2013-11-10 03:07:07]
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);
//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);
?>
Objects are filled in the array BY REFERENCE. They are not copied for each element in the array.
[#3] miguelxpain at gmail dot com [2012-02-24 18:04:55]
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
?>
I hope some one find this usefull
[#4] csst0266 at cs dot uoi dot gr [2004-08-11 10:32:39]
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.
[#5] [2002-08-25 13:59:46]
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.