alex_petrov7 Aug 2025 14:42

Regular PHP arrays are hash maps under the hood. Each element carries significant overhead (key hash, value zval, next pointer). For large integer-indexed arrays this wastes memory.

Comparison:

PHP
<?php
$n = 200000;
$before = memory_get_usage();
$plain = range(0, $n - 1);
echo 'array: ' . round((memory_get_usage() - $before) / 1024 / 1024, 2) . " MB\n";
unset($plain);
gc_collect_cycles();
$before = memory_get_usage();
$fixed = SplFixedArray::fromArray(range(0, $n - 1));
echo 'SplFixedArray: ' . round((memory_get_usage() - $before) / 1024 / 1024, 2) . " MB\n";
unset($fixed);
gc_collect_cycles();
$before = memory_get_usage();
$packed = pack('N*', ...range(0, $n - 1));
echo 'pack (binary): ' . round((memory_get_usage() - $before) / 1024 / 1024, 2) . " MB\n";
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Run this in the sandbox to see the actual numbers.

Replies (5)
dmitry_kv7 Aug 2025 14:48

In PHP 8+ the internal array representation improved significantly. The gap between SplFixedArray and plain array narrowed. Worth benchmarking on your actual PHP version rather than relying on old numbers.

0
nphp7 Aug 2025 16:03

SplMinHeap, SplMaxHeap, SplStack, SplQueue are all worth knowing. For priority queues SplMinHeap is significantly faster than sorting an array on each insert.

0
vova7 Aug 2025 17:34

For purely numeric data (coordinates, timestamps, sensor readings), pack/unpack with binary strings is the most memory-efficient. The tradeoff is more complex access code.

0
wzhang7 Aug 2025 19:28

I tried SplFixedArray in production for a 500k element dataset and it caused issues because some array functions (array_map, array_filter) do not work on SplFixedArray. Had to convert back and forth which erased the memory savings.

0
alex_petrov7 Aug 2025 19:53

That is the main practical problem. SplFixedArray does not implement all array interfaces. If your code uses array_* functions extensively, the conversion overhead often exceeds the savings. Generators or chunking are usually a better trade-off.

0