8.10.6 Tableaux
Les tableaux sont stockées dans les tables de hashage internes de Zend,
qui sont accessibles via les fonctions
zend_hash_*
.
Pour chaque tableau que vous voulez créer, vous devez créer une nouvelle
table de hashage, qui sera stockée dans le membre
ht
du
champs
zval.value
.
Il y a tout un jeu de fonctions pour simplement créer des tableaux, qui se
révèle très pratique. Pour créer un nouveau tableau, appelez la fonction
array_init
.
zval *new_array;
MAKE_STD_ZVAL(new_array);
if(array_init(new_array) != SUCCESS) { // gestion des erreurs }
Si
array_init
échoue à créer un tableau,
elle retournera
FAILURE
.
Pour ajouter un nouvel élément au tableau, vous pouvez utiliser
l'une des nombreuses fonctions conçues pour ce faire, suivant
la manière que vous voulez le faire.
Les tableaux API Zend pour les tableaux associatifs ,
API Zend pour les tableaux indexés (Partie 1) et
API Zend pour les tableaux indexés (Partie 2)
vous décrives toutes ces fonctions. Elles retournent toutes
FAILURE
en cas d'échec et
SUCCESS
en cas de succès.
Toutes ces fonctions fournissent une couche d'abstraction des tables
de hashage Zend. Bien sur, vous pouvez aussi utiliser directement les
fonctions de hash : par exemple, si vous avez déjà une enveloppe
zval
allouée, que vous souhaitez insérer dans un tableau.
Cela se fait avec la fonction
zend_hash_update()
pour les tableaux associatifs (voir Ajouter un élément dans un tableau associatif ) et
zend_hash_index_update
pour les tableaux
indexés (voir Ajouter un élément dans un tableau indexé ):
Pour émuler la fonctionnalité de
add_next_index_*
, vous pouvez utiliser ceci :
zend_hash_next_index_insert(ht, zval **new_element, sizeof(zval *), NULL)
Note:
pour retourner un tableau depuis une fonction, utilisez
la fonction
array_init
et toutes les fonctions
nécessaires sur la variable prédéfinie
return_value
(qui est fournie comme argument de vos fonctions exportées;
reportez vous aux discussions sur le retour de valeurs). Vous n'avez
pas à utiliser
MAKE_STD_ZVAL
avec cette variable.
Tip:
Pour éviter d'avoir à écrire
new_array->value.ht
à chaque fois, vous opuvez
utiliser la macro
HASH_OF(new_array)
, qui est aussi
recommandée pour des raisons de compatibilité et de style.
|