Comments 3
Отличная статья, спасибо
0
Массив сразу создается упакованным если он инициализируется элементом с числовым ключом меньшим nTableSize. «Распаковка» происходит в следующих случаях:
1. Добавляется элемент со строковым ключем — тут все очевидно
2. Пустой массив инициализируется элементом с числовым ключем большим или равным nTableSize = HT_MIN_SIZE = 8. Точнее массив сразу инициализируется как mixed.
3. Добавляется элемент с числовым индексом меньшим, чем максимально использованный в массиве.
4. Производится сортировка с сохранением ключей
1. Добавляется элемент со строковым ключем — тут все очевидно
2. Пустой массив инициализируется элементом с числовым ключем большим или равным nTableSize = HT_MIN_SIZE = 8. Точнее массив сразу инициализируется как mixed.
3. Добавляется элемент с числовым индексом меньшим, чем максимально использованный в массиве.
$arr = []; // flags = HASH_FLAG_UNINITIALIZED, nTableSize = HT_MIN_SIZE
$arr[2] = 'a'; // Т.к. 2 < nTableSize, то массив инициализируется "упакованным".
// [0=>IS_UNDEF, 1=>IS_UNDEF, 2=>'a' ... 7=>IS_UNDEF]
$arr[1] = 'b'; // Упс! Мы должны сохранять очередность элементов
// массив "распаковывается" в хеш-таблицу
4. Производится сортировка с сохранением ключей
+1
Sign up to leave a comment.
PHP, GDB и массивы