PHP Conference Japan 2024

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 為負數,在 PHP 8.0.0 之前,返回陣列的第一個索引會是 start_index,後續的索引則從零開始;從 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 不會存在。

注意事項

另請參閱手冊的陣列章節,以取得關於負索引的詳細說明。

參見

新增註釋

使用者提供的註釋 6 則註釋

csst0266 at cs dot uoi dot gr
20 年前
這是我最近快速建立一個初始化為 0 的二維陣列 (10x10) 的方法

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

這應該適用於您想要的任意維度,每次都將另一個 array_fill() 函式作為第三個參數傳遞給 array_fill()。
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
)
mchljnk at NOSPAM dot gmail dot com
11 年前
使用物件搭配 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"
}
}
*/
?>

物件是以「參考」的方式填入陣列。它們不會針對陣列中的每個元素進行複製。
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_index 以及 https://github.com/php/php-src/pull/3772
miguelxpain at gmail dot com
12 年前
我寫了一個名為「array_getMax」的函式,它會從陣列中傳回最大值及其索引。

<?php
// 使用 helenadeus at gmail dot com 所撰寫的 array_search_all 函式

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)
}
*/
?>

希望有人覺得這個有用。
Hayley Watson
6 年前
使用預設值填補(數值索引)陣列中缺少的鍵值。

<?php

函式 fill_missing_keys($array, $default = null, $atleast = 0)
{
返回
$array + array_fill(0, max($atleast, max(array_keys($array))), $default);
}

?>
To Top