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

value 参数的值填充一个数组,包含 count 个条目,键从 start_index 参数开始。

参数

start_index

返回数组的第一个索引。

如果 start_index 为负数,则返回数组的第一个索引将为 start_index,而后续索引将在 PHP 8.0.0 之前从零开始;从 PHP 8.0.0 开始,负键将正常递增(参见 示例)。

count

要插入的元素数量。必须大于或等于零,小于或等于 2147483647

value

用于填充的值

返回值

返回填充后的数组

错误/异常

如果 count 超出范围,则抛出 ValueError

变更日志

版本 说明
8.0.0 如果 count 超出范围,array_fill() 现在会抛出 ValueError;以前会引发 E_WARNING,函数返回 false

示例

示例 #1 array_fill() 示例

<?php
$a
= array_fill(5, 6, 'banana');
print_r($a);
?>

上面的示例将输出

Array
(
    [5]  => banana
    [6]  => banana
    [7]  => banana
    [8]  => banana
    [9]  => banana
    [10] => banana
)

示例 #2 带有负起始索引的 array_fill() 示例

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

PHP 7 中上面示例的输出

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

PHP 8 中上面示例的输出

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

请注意,在 PHP 8.0.0 之前,索引 -1 不存在。

注释

有关负键的详细说明,请参见手册的 数组 部分。

参见

添加注释

用户贡献的注释 7 个注释

81
csst0266 at cs dot uoi dot gr
20 年前
这是我最近为了快速创建一个二维数组(10x10),初始化为 0 所做的操作

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

这应该适用于您想要的任意维度,每次都将另一个 array_fill() 函数传递给 array_fill()(作为第三个参数)。
45
anatoliy at ukhvanovy dot name
10 年前
如果您需要负索引
<?php
$b
= array_fill(-2, 4, 'pear');//这不是我们想要的
$c = array_fill_keys(range(-2,1),'pear');//这些是负索引
print_r($b);
print_r($c);
?>
以下是上面代码的结果
数组
(
[-2] => pear
[0] => pear
[1] => pear
[2] => pear
)
数组
(
[-2] => pear
[-1] => pear
[0] => pear
[1] => pear
)
3
user at NOSPAM dot example dot com
3 年前
从 PHP 8.0 开始,示例代码

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

现在返回

数组
(
[-2] => pear
[-1] => pear
[0] => pear
[1] => pear
)

参见 https://wiki.php.net/rfc/negative_array_indexhttps://github.com/php/php-src/pull/3772
35
mchljnk at NOSPAM dot gmail dot com
10 年前
使用对象与 array_fill 可能会导致意外的结果。请考虑以下情况

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

//用对象填充数组
$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"
}
} */

//现在我们更改存储在索引 0 中的对象的属性
//这实际上会更改整个数组中每个对象的属性
$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"
}
}
*/
?>

数组中的对象是通过引用填充的。它们不会为数组中的每个元素复制。
1
miguelxpain at gmail dot com
12 年前
我创建了名为 "array_getMax" 的函数,它从数组中返回最大值和索引

<?php
// 使用 array_search_all 函数,作者:helenadeus,邮箱:gmail dot com

function array_search_all($needle, $haystack)
{
# array_search_match($needle, $haystack) 返回在 $haystack 中所有与 $needle 匹配的值的键

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 ){// 当所有值都相同时,返回整个数组。
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);


}

// 示例
$arreglo=array('e1'=>99,'e2'=>'99','e3'=>1,'e4'=>1,'e5'=>98);

var_dump(array_getMax($arreglo));

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

希望有人发现这有用
-2
Hayley Watson
6 年前
在(按数字索引的)数组中填充缺失的键,使用默认值

<?php

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

?>
-28
匿名
21 年前
array_fill() 不能用于在数组中设置仅缺失的键。这在例如使用 implode() 处理稀疏填充数组之前可能是必要的。
解决方案是使用此函数

<?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);
}
?>

这在某些情况下很有用,在这些情况下,您不知道填充了哪个键索引,并且您希望在拆分它时保留 imploded 数组中定位字段与键索引之间的关联。
To Top