首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP array_fill() 函式完整指南:指定索引起始、數量與值的陣列快速建立

     編輯:PHP 相關知識

array_fill() 能以單一值快速產生指定長度、指定起始索引的數值索引陣列,是初始化預設值、建立查找表、測試資料生成的高效工具。

語法與參數

array_fill(int $startIndex, int $count, mixed $value): array
參數型別必要性說明
$startIndexint必填第一個元素的索引值(可為負數)。
$countint必填元素數量,必須 > 0,否則拋出 ValueError (PHP 8.0+) / Warning (舊版)。
$valuemixed必填填充值,支援任意型別(含物件、陣列、null)。

核心行為特徵

  • 僅產生數值索引:索引從 $startIndex 開始遞增 1,不支援字串鍵名。
  • 負數索引支援:array_fill(-2, 3, 'x') → [-2=>'x', -1=>'x', 0=>'x']。
  • 值為引用複製:填充物件/陣列時,所有元素指向同一實體(淺拷貝),修改一處影響全體。
  • 回傳新陣列:不修改任何現有變數。

實戰範例與輸出

範例 1:基本用法

<?php
$a = array_fill(2, 3, 'Dog');
print_r($a);
// 輸出:
// Array (
//     [2] => Dog
//     [3] => Dog
//     [4] => Dog
// )
?>

範例 2:負數起始索引

<?php
$b = array_fill(-3, 5, 'test');
print_r($b);
// 輸出:
// Array (
//     [-3] => test
//     [-2] => test
//     [-1] => test
//     [0] => test
//     [1] => test
// )
?>

範例 3:填充物件(淺拷貝陷阱)

<?php
class Counter { public $n = 0; }
$obj = new Counter();
$arr = array_fill(0, 3, $obj); // 三個元素指向同一物件
$arr[0]->n = 10;
print_r($arr[2]->n); // 輸出 10(非預期)

// 正確做法:使用匿名函式產生獨立實體
$arr = array_map(fn() => new Counter(), range(0, 2));
$arr[0]->n = 10;
print_r($arr[2]->n); // 輸出 0(獨立)
?>

範例 4:建立預設配置陣列

<?php
// 產生 10 個預設分頁大小為 20 的配置項
$pageConfigs = array_fill(1, 10, ['per_page' => 20, 'sort' => 'desc']);
// 注意:上述同樣面臨淺拷貝問題,實務上建議:
$pageConfigs = array_map(
    fn($i) => ['id' => $i, 'per_page' => 20, 'sort' => 'desc'],
    range(1, 10)
);
?>

常見錯誤與避坑

錯誤代碼原因修正
ValueError: Count must be positive$count <= 0確保 $count >= 1
所有元素同步變更填充物件/陣列為淺拷貝改用 array_map() 或迴圈 new 實體
索引非預期誤以為支援字串鍵需字串鍵請用 array_fill_keys()

相關函式快速對照

函式用途鍵名類型值來源
array_fill()固定值重複數值遞增單一值
array_fill_keys()指定鍵名填值自定陣列單一值
range()數值/字串序列數值遞增序列本身
array_map()動態產生值保留原鍵/重新索引回調函式

array_fill() 以極簡語法解決固定值重複填充需求,配合 array_map() 可彈性處理物件獨立實體化,是陣列初始化工具箱中的核心成員。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved