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

PHP SPL 固定長度陣列 SplFixedArray:高效能替代方案

     編輯:PHP 相關知識

PHP SPL 固定長度陣列 SplFixedArray:高效能替代方案

普通 PHP 陣列是有序映射(HashTable),記憶體開銷大、擴容複製慢。SplFixedArray 以 C 級連續記憶體儲存,僅支援整數鍵、固定長度,讀寫效能提升 20%-30%,記憶體減少 50%+,適合大數據量、高頻讀寫場景。

效能基準測試 (PHP 8.2)

ini_set('memory_limit', '128M');
for ($size = 10000; $size < 2600000; $size *= 4) {
    echo "\nSize: $size\n";
    $t = microtime(true); $a = []; for ($i=0;$i<$size;$i++) $a[$i]=null; echo "Array: " . (microtime(true)-$t) . "s\n";
    $t = microtime(true); $b = new SplFixedArray($size); for ($i=0;$i<$size;$i++) $b[$i]=null; echo "SplFixedArray: " . (microtime(true)-$t) . "s\n";
}
/*
Size: 10000   Array: 0.004s  SplFixedArray: 0.002s
Size: 640000  Array: 0.20s   SplFixedArray: 0.17s
Size: 2560000 Array: 0.76s   SplFixedArray: 0.67s
*/

核心 API

方法說明
__construct($size)創建指定長度陣列 (預設 0)
setSize($size)動態調整長度 (擴容保留數據,縮容截斷)
getSize()獲取當前長度
offsetGet/Set/Unset/Exists隨機存取 (ArrayAccess)
toArray()轉為普通陣列
fromArray($arr, $saveKeys)靜態工廠:從陣列創建
count()/iteratorCountable/Iterator 介面

使用範例

$arr = new SplFixedArray(4);
$arr[0] = 'php';
$arr[1] = 1;
$arr[3] = 'python'; // 索引 2 為 null

foreach ($arr as $v) echo "$v "; // php 1 python

echo "長度: {$arr->getSize()}\n"; // 4
$arr->setSize(5);
$arr[4] = 'new';

// 越界拋出 RuntimeException
try { echo $arr[10]; } catch (RuntimeException $e) { echo "越界: {$e->getMessage()}\n"; }

適用場景與避坑

  • ✅ 大量數值型數據(矩陣運算、圖像像素、日誌緩衝)
  • ✅ 固定結構的 DTO/VO 集合
  • ❌ 需要字符串鍵、頻繁增減長度、稀疏陣列
  • ❌ 需要 array_map/filter/reduce 等高階函數 (需先 toArray())
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved