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 ?
Ou existe-t-il une solution plus �l�gante/juste ?
Merci.
Bonjour,
> 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
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()).
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().
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 :
<http://fr2.php.net/manual/fr/function.each.php>
print_r($bar);
Array
(
[1] => bob
[value] => bob
[0] => 0
[key] => 0
)
</>
Cordialement,
--
Olivier Miakinen
> 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.
> 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�.
> 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
> 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.