Afin de choisir une valeur par défaut, j'ai besoin de récupérer la
première clef d'un tableau.
Donc j'ai :
$a = array( 'foo'=>'bar' , 'alice'=>'bob );
Je fais une recherche parmi les clefs, mais si je ne trouve rien, je
veux la première du tableau.
Par exemple je demande :
array_key_exists('zut',$a);
et je voudrais en retour :
foo
Je n'ai pas trouvé d'autres moyens que d'utiliser array_keys :
$x = array_keys($a); // ne pouvant faire $x = array_keys($a)[0]
echo $x[0]; // ma clef par défaut étant la première
Mais est-ce fiable ? Car je n'ai vu nulle part dans la doc que l'ordre
des paires était conservé.
Donc est-ce que array_values (ou keys) maintient toujours l'ordre
définit à la création du tableau ?
Afin de choisir une valeur par défaut, j'ai besoin de récupérer la première clef d'un tableau.
Qui dit "première" dit ordonnancement, donc tableau indexé.
Donc j'ai : $a = array( 'foo'=>'bar' , 'alice'=>'bob );
Et là je vois un tableau associatif ???
Mais est-ce fiable ? Car je n'ai vu nulle part dans la doc que l'ordre des paires était conservé.
D'où la problématique qui est peut-être due à une incohérence de départ.
Donc est-ce que array_values (ou keys) maintient toujours l'ordre définit à la création du tableau ?
Ou existe-t-il une solution plus élégante/juste ?
Si vraiment il faut gérer des couples nom/valeur tout en gardant un ordonnancement, la solution est peut-être d'utiliser une dimension supplémentaire.
Dans l'exemple, ça donnerait : <?php $a = array( array('foo', 'bar'), array('alice', 'bob') ); ?>
Cordialement, Pascal
Olivier Miakinen
Le 07/01/2010 18:36, Olivier Masson a écrit :
Afin de choisir une valeur par défaut, j'ai besoin de récupérer la première clef d'un tableau.
Donc j'ai : $a = array( 'foo'=>'bar' , 'alice'=>'bob );
Je fais une recherche parmi les clefs, mais si je ne trouve rien, je veux la première du tableau.
Par exemple je demande : array_key_exists('zut',$a); et je voudrais en retour : foo
Je n'ai pas trouvé d'autres moyens que d'utiliser array_keys : $x = array_keys($a); // ne pouvant faire $x = array_keys($a)[0] echo $x[0]; // ma clef par défaut étant la première
Je ne les ai jamais utilisées car j'ai commencé à coder en PHP alors que l'instruction foreach existait déjà, mais je pense que les fonctions reset() et each() devraient faire ton bonheur : http://fr2.php.net/manual/fr/function.reset.php http://fr2.php.net/manual/fr/function.each.php
Mais est-ce fiable ? Car je n'ai vu nulle part dans la doc que l'ordre des paires était conservé.
Ce que l'on voit dans la doc de certaines fonctions, c'est le cas où justement elles détruisent l'ordre des entrées du tableau. On peut donc supposer que dans tous les cas où ils ne disent rien l'ordre est préservé...
Les deux commentaires suivants confirment ce sentiment : http://fr2.php.net/manual/fr/function.array-reverse.php#4178
Ou existe-t-il une solution plus élégante/juste ?
Cf. supra (reset() + each()).
Le 07/01/2010 18:36, Olivier Masson a écrit :
Afin de choisir une valeur par défaut, j'ai besoin de récupérer la
première clef d'un tableau.
Donc j'ai :
$a = array( 'foo'=>'bar' , 'alice'=>'bob );
Je fais une recherche parmi les clefs, mais si je ne trouve rien, je
veux la première du tableau.
Par exemple je demande :
array_key_exists('zut',$a);
et je voudrais en retour :
foo
Je n'ai pas trouvé d'autres moyens que d'utiliser array_keys :
$x = array_keys($a); // ne pouvant faire $x = array_keys($a)[0]
echo $x[0]; // ma clef par défaut étant la première
Je ne les ai jamais utilisées car j'ai commencé à coder en PHP alors que
l'instruction foreach existait déjà, mais je pense que les fonctions
reset() et each() devraient faire ton bonheur :
http://fr2.php.net/manual/fr/function.reset.php
http://fr2.php.net/manual/fr/function.each.php
Mais est-ce fiable ? Car je n'ai vu nulle part dans la doc que l'ordre
des paires était conservé.
Ce que l'on voit dans la doc de certaines fonctions, c'est le cas où
justement elles détruisent l'ordre des entrées du tableau. On peut
donc supposer que dans tous les cas où ils ne disent rien l'ordre est
préservé...
Les deux commentaires suivants confirment ce sentiment :
http://fr2.php.net/manual/fr/function.array-reverse.php#4178
Afin de choisir une valeur par défaut, j'ai besoin de récupérer la première clef d'un tableau.
Donc j'ai : $a = array( 'foo'=>'bar' , 'alice'=>'bob );
Je fais une recherche parmi les clefs, mais si je ne trouve rien, je veux la première du tableau.
Par exemple je demande : array_key_exists('zut',$a); et je voudrais en retour : foo
Je n'ai pas trouvé d'autres moyens que d'utiliser array_keys : $x = array_keys($a); // ne pouvant faire $x = array_keys($a)[0] echo $x[0]; // ma clef par défaut étant la première
Je ne les ai jamais utilisées car j'ai commencé à coder en PHP alors que l'instruction foreach existait déjà, mais je pense que les fonctions reset() et each() devraient faire ton bonheur : http://fr2.php.net/manual/fr/function.reset.php http://fr2.php.net/manual/fr/function.each.php
Mais est-ce fiable ? Car je n'ai vu nulle part dans la doc que l'ordre des paires était conservé.
Ce que l'on voit dans la doc de certaines fonctions, c'est le cas où justement elles détruisent l'ordre des entrées du tableau. On peut donc supposer que dans tous les cas où ils ne disent rien l'ordre est préservé...
Les deux commentaires suivants confirment ce sentiment : http://fr2.php.net/manual/fr/function.array-reverse.php#4178
Ou existe-t-il une solution plus élégante/juste ?
Cf. supra (reset() + each()).
Olivier Miakinen
Le 07/01/2010 20:52, je répondais à Olivier Masson :
Je ne les ai jamais utilisées car j'ai commencé à coder en PHP alors que l'instruction foreach existait déjà, mais je pense que les fonctions reset() et each() devraient faire ton bonheur :
Il y a même beaucoup plus simple ! Puisque tu ne veux que la première valeur et pas son index, il te suffit d'utiliser current(). Du coup, puisque contrairement à each() il n'incrémente pas le pointeur de tableau, tu n'as probablement pas besoin de reset().
Le 07/01/2010 20:52, je répondais à Olivier Masson :
Je ne les ai jamais utilisées car j'ai commencé à coder en PHP alors que
l'instruction foreach existait déjà, mais je pense que les fonctions
reset() et each() devraient faire ton bonheur :
Il y a même beaucoup plus simple ! Puisque tu ne veux que la première
valeur et pas son index, il te suffit d'utiliser current(). Du coup,
puisque contrairement à each() il n'incrémente pas le pointeur de
tableau, tu n'as probablement pas besoin de reset().
Le 07/01/2010 20:52, je répondais à Olivier Masson :
Je ne les ai jamais utilisées car j'ai commencé à coder en PHP alors que l'instruction foreach existait déjà, mais je pense que les fonctions reset() et each() devraient faire ton bonheur :
Il y a même beaucoup plus simple ! Puisque tu ne veux que la première valeur et pas son index, il te suffit d'utiliser current(). Du coup, puisque contrairement à each() il n'incrémente pas le pointeur de tableau, tu n'as probablement pas besoin de reset().
Le 07/01/2010 20:52, Pascal répondait à Olivier Masson :
Afin de choisir une valeur par défaut, j'ai besoin de récupérer la première clef d'un tableau.
Qui dit "première" dit ordonnancement, donc tableau indexé.
Justement non. Un tableau PHP garde déjà l'ordre d'insertion des éléments, indépendamment des index utilisés.
Il suffit de voir à quoi ressemble le résultat d'un each(), et l'ordre de ses éléments, pour se convaincre que cet ordre est complètement indépendant des numéros d'index :
Array ( [1] => bob [value] => bob [0] => 0 [key] => 0 ) </>
Cordialement, -- Olivier Miakinen
Le 07/01/2010 20:52, Pascal répondait à Olivier Masson :
Afin de choisir une valeur par défaut, j'ai besoin de récupérer la
première clef d'un tableau.
Qui dit "première" dit ordonnancement, donc tableau indexé.
Justement non. Un tableau PHP garde déjà l'ordre d'insertion des
éléments, indépendamment des index utilisés.
Il suffit de voir à quoi ressemble le résultat d'un each(), et l'ordre
de ses éléments, pour se convaincre que cet ordre est complètement
indépendant des numéros d'index :
Le 07/01/2010 20:52, Pascal répondait à Olivier Masson :
Afin de choisir une valeur par défaut, j'ai besoin de récupérer la première clef d'un tableau.
Qui dit "première" dit ordonnancement, donc tableau indexé.
Justement non. Un tableau PHP garde déjà l'ordre d'insertion des éléments, indépendamment des index utilisés.
Il suffit de voir à quoi ressemble le résultat d'un each(), et l'ordre de ses éléments, pour se convaincre que cet ordre est complètement indépendant des numéros d'index :
Array ( [1] => bob [value] => bob [0] => 0 [key] => 0 ) </>
Cordialement, -- Olivier Miakinen
Olivier Masson
Le 07/01/2010 20:52, Olivier Miakinen a écrit :
Je ne les ai jamais utilisées car j'ai commencé à coder en PHP alors que l'instruction foreach existait déjà, mais je pense que les fonctions reset() et each() devraient faire ton bonheur : http://fr2.php.net/manual/fr/function.reset.php http://fr2.php.net/manual/fr/function.each.php
Effectivement. Je n'ai jamais non plus.
Les deux commentaires suivants confirment ce sentiment : http://fr2.php.net/manual/fr/function.array-reverse.php#4178
En effet ? Le commentaire que tu pointes ne m'aurait pas forcément persuadé mais il semble évident que si on peut faire un array_reverse, c'est bien que les paires sont ordonnées.
Bonne idée pour le current() que tu indiques par ailleurs (mais je préfères considérer que je peux changer la position du choix par défaut).
Merci.
Le 07/01/2010 20:52, Olivier Miakinen a écrit :
Je ne les ai jamais utilisées car j'ai commencé à coder en PHP alors que
l'instruction foreach existait déjà, mais je pense que les fonctions
reset() et each() devraient faire ton bonheur :
http://fr2.php.net/manual/fr/function.reset.php
http://fr2.php.net/manual/fr/function.each.php
Effectivement. Je n'ai jamais non plus.
Les deux commentaires suivants confirment ce sentiment :
http://fr2.php.net/manual/fr/function.array-reverse.php#4178
En effet ?
Le commentaire que tu pointes ne m'aurait pas forcément persuadé mais il
semble évident que si on peut faire un array_reverse, c'est bien que les
paires sont ordonnées.
Bonne idée pour le current() que tu indiques par ailleurs (mais je
préfères considérer que je peux changer la position du choix par défaut).
Je ne les ai jamais utilisées car j'ai commencé à coder en PHP alors que l'instruction foreach existait déjà, mais je pense que les fonctions reset() et each() devraient faire ton bonheur : http://fr2.php.net/manual/fr/function.reset.php http://fr2.php.net/manual/fr/function.each.php
Effectivement. Je n'ai jamais non plus.
Les deux commentaires suivants confirment ce sentiment : http://fr2.php.net/manual/fr/function.array-reverse.php#4178
En effet ? Le commentaire que tu pointes ne m'aurait pas forcément persuadé mais il semble évident que si on peut faire un array_reverse, c'est bien que les paires sont ordonnées.
Bonne idée pour le current() que tu indiques par ailleurs (mais je préfères considérer que je peux changer la position du choix par défaut).
Merci.
Olivier Masson
Le 07/01/2010 20:52, Pascal a écrit :
D'où la problématique qui est peut-être due à une incohérence de départ.
Je ne pense pas : c'est une utilisation dans un select. Les "value" de l'option sont les valeurs du tableau, les clefs sont affectées aux for/id. On ne peut affecter les valeurs de tableaux également aux id puisque ces derniers n'acceptent pas tous types de caractères. Et il me faut quelque chose d'explicite et spécifique, donc pas de nombre (ce qui est interdit) ni de truc comme "p0".
Si vraiment il faut gérer des couples nom/valeur tout en gardant un ordonnancement, la solution est peut-être d'utiliser une dimension supplémentaire.
C'est bien ce que je souhaite éviter puisque je fais tout ça pour avoir une bonne lisibilité.
Le 07/01/2010 20:52, Pascal a écrit :
D'où la problématique qui est peut-être due à une incohérence de départ.
Je ne pense pas : c'est une utilisation dans un select. Les "value" de
l'option sont les valeurs du tableau, les clefs sont affectées aux for/id.
On ne peut affecter les valeurs de tableaux également aux id puisque ces
derniers n'acceptent pas tous types de caractères.
Et il me faut quelque chose d'explicite et spécifique, donc pas de
nombre (ce qui est interdit) ni de truc comme "p0".
Si vraiment il faut gérer des couples nom/valeur tout en gardant un
ordonnancement, la solution est peut-être d'utiliser une dimension
supplémentaire.
C'est bien ce que je souhaite éviter puisque je fais tout ça pour avoir
une bonne lisibilité.
D'où la problématique qui est peut-être due à une incohérence de départ.
Je ne pense pas : c'est une utilisation dans un select. Les "value" de l'option sont les valeurs du tableau, les clefs sont affectées aux for/id. On ne peut affecter les valeurs de tableaux également aux id puisque ces derniers n'acceptent pas tous types de caractères. Et il me faut quelque chose d'explicite et spécifique, donc pas de nombre (ce qui est interdit) ni de truc comme "p0".
Si vraiment il faut gérer des couples nom/valeur tout en gardant un ordonnancement, la solution est peut-être d'utiliser une dimension supplémentaire.
C'est bien ce que je souhaite éviter puisque je fais tout ça pour avoir une bonne lisibilité.
Mickael Wolff
Olivier Masson a écrit :
Bonne idée pour le current() que tu indiques par ailleurs (mais je préfères considérer que je peux changer la position du choix par défaut).
Dans ce cas on peut utiliser array_slice. Mais il a l'effet de bord de réinitialiser le curseur du tableau. -- Mickaël Wolff aka Lupus Michaelis http://lupusmic.org
Olivier Masson a écrit :
Bonne idée pour le current() que tu indiques par ailleurs (mais je
préfères considérer que je peux changer la position du choix par défaut).
Dans ce cas on peut utiliser array_slice. Mais il a l'effet de bord
de réinitialiser le curseur du tableau.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Bonne idée pour le current() que tu indiques par ailleurs (mais je préfères considérer que je peux changer la position du choix par défaut).
Dans ce cas on peut utiliser array_slice. Mais il a l'effet de bord de réinitialiser le curseur du tableau. -- Mickaël Wolff aka Lupus Michaelis http://lupusmic.org
Olivier Masson
Le 08/01/2010 20:20, Mickael Wolff a écrit :
Dans ce cas on peut utiliser array_slice. Mais il a l'effet de bord de réinitialiser le curseur du tableau.
Ah oui tiens. Parfois je me demande à quoi peuvent servir certains fonctions mais je les oublie ensuite. Merci.
Le 08/01/2010 20:20, Mickael Wolff a écrit :
Dans ce cas on peut utiliser array_slice. Mais il a l'effet de bord de
réinitialiser le curseur du tableau.
Ah oui tiens. Parfois je me demande à quoi peuvent servir certains
fonctions mais je les oublie ensuite.
Merci.