| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
МассивыМассивы хранятся с использованием внутренних хэш-таблиц Zend, доступ к которым может быть получен с помощью zend_hash_*() API. Для каждого создаваемого вами массива вам понадобится дескриптор новой хэш таблицы, который хранится в члене ht контейнера zval.value. Имеется API, предназначенный исключительно для создания массивов.
Если array_init() не смогла создать новый массив, она возвращает FAILURE. Для добавления в массив новых элементов вы можете использовать многочисленные функции, в зависимости от того, что нужно сделать. В Таблицах 9.8, 9.9 и 9.10 описаны эти функции. Все функции возвращают FAILURE при неудаче и SUCCESS при успешном выполнении. Рисунок 34-3. Таблица 9.8. Zend's API для ассоциативных массивов
Рисунок 34-4. Таблица 9.9. Zend's API для индексированных массивов , Часть 1
Рисунок 34-5. Таблица 9.10. Zend's API для индексированных массивов , Часть 2
Все эти функции предоставляют удобную абстракцию API внутреннего хэша Zend. Разумеется, вы можете также использовать функции хэша напрямую - например, если у вас уже есть размещённый zval-контейнер, который вы хотите вставить в массив. Это делается с помощью zend_hash_update()() для ассоциативный массивов (см. Листинг 9.12) и zend_hash_index_update() - для индексированных массивов (см. Листинг 9.13): Рисунок 34-6. Листинг 9.12. Добавление элемента в ассоциативный массив.
Рисунок 34-7. Листинг 9.13. Добавление элемента в индексированный массив.
Для эмуляции функциональности add_next_index_*() вы можете использовать:
Подсказка: чтобы исключить необходимость каждый раз записывать new_array->value.ht, вы можете использовать HASH_OF(new_array), что рекомендуется также по соображениям стиля и обеспечения совместимости. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|