Comments 10
Как будто попал в старый добрый хабр.
Статья о програмированиии а не вайбкодировании и написании промптов
Packed (вектор). Значения хранятся подряд в одном блоке памяти. Есть ёмкость (capacity). Пока есть запас — вставки производятся в конец (сложность O(1)). Когда места не хватает — аллоцируется больший блок памяти, старые элементы копируются в него.
А какова там capacity?
Давайте проверим. Простой скрипт, в котором массив увеличивается, а мы измеряем занимаемую память. Должны быть "прыжки" при выделении емкости.
<?php
$arr = [];
$prev = memory_get_usage();
echo "Элемент\tПамять\t\tДельта\n";
echo "==========================================\n";
for ($i = 0; $i < 100000; $i++) {
$arr[] = $i;
$curr = memory_get_usage();
$delta = $curr - $prev;
if ($delta > 0 && $i > 0) {
echo "$i\t\t" . number_format($curr) . " B\t" . number_format($delta) . " B\n";
}
$prev = $curr;
}
?>
И вот ответ:

P.S.: Добавлю в статью. Полезно.
Есть еще SplFixedArray, который имеет явно заданный размер в момент создания и целочисленные индексы. Размер можно на ходу поменять явно, но тогда это приведет к копированию всего старого массива в новый.
Спасибо за статью!
В одном из массиве подберем ключи таким образом
Опечатка.
отличная статья, сам не так давно реализовывал мудреный алгоритм с большим количеством вхождений по хэшам и с удивлением обнаружил для себя на сколько эти массивы в php эффективные, просто космос для интерпретируемого языка.
Трюк со ссылкой при foreach часто в старинное коде можно встретить, когда ооп слабое было и в языке и в сообществе мало распространено.
А если ооп-подход использовать и во вложенных уровнях массива использовать объекты, смысл теряется, поскольку они и так модифицируюся. Но и расход памяти на них иной.
Шикарная статья, давно такого не было
Очень полезная информация и очень хорошо написано, спасибо! "Хотим ищо" =)
Как устроены массивы в PHP и как код влияет на скорость работы с ними