|
Arrays are stored using Zend's internal hash tables, which can be
accessed using the zend_hash_*() API. For every array that
you want to create, you need a new hash table handle, which will be
stored in the ht member of
the zval.value container. There's a whole API solely for the creation of arrays, which is extremely
handy. To start a new array, you call
array_init().
zval *new_array;
MAKE_STD_ZVAL(new_array);
if(array_init(new_array) != SUCCESS)
{
// do error handling here
} |
If array_init() fails to create a
new array, it returns FAILURE. To add new elements to the array, you can use numerous functions,
depending on what you want to do. Tables 9.8, 9.9, and 9.10 describe these functions. All functions return FAILURE on failure
and SUCCESS on success. All these functions provide a handy abstraction to Zend's internal hash
API. Of course, you can also use the hash functions directly - for example, if
you already have a zval container allocated that you want to insert into an array. This is done using zend_hash_update()() for
associative arrays (see Listing 9.12) and zend_hash_index_update() for
indexed arrays (see Listing 9.13):
To emulate the functionality of add_next_index_*(),
you can use this: zend_hash_next_index_insert(ht, zval **new_element, sizeof(zval *), NULL) |
Note: To return arrays from a function, use array_init() and
all following actions on the predefined variable return_value
(given as argument to your exported function; see the earlier discussion of the call interface). You do not have to use
MAKE_STD_ZVAL on this. Tip: To avoid having to
write new_array->value.ht every time, you can
use HASH_OF(new_array), which is also recommended for
compatibility and style reasons.
| |