Première valeur d'un tableau associatif ?

Signaler
Messages postés
30
Date d'inscription
vendredi 22 juillet 2005
Statut
Membre
Dernière intervention
7 mai 2009
-
 tgra78 -
Bonjour,


Je vousdrais SVP connaître la fonction (si elle existe) qui permet trouver la 1ere valeur d’un tableau associatif.


Pour un tableau simple, c’est très facile : $tableau[0] ;


Mais visiblement ca na fonctionne pas avec les tableau avec : clé => valeurs.



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




J’ai chercher un peu partout sans trouver


Quelqun  a une idée ?


Cdl, Hakim.

11 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Oups, 1ère valeur, pas première clef : remplacer key() par current().
Salut
Dpuis PHP 7.3, tu peux utiliser $TAB[array_key_first($TAB)]
sinon avant il faut faire $TAB[array_keys($TAB)[0]] avec un isset() pour etre sur que cela existe.
Messages postés
385
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
21 août 2015
2
tableau['clé']...

Au début, on essaye de trouver une solution qui marche, et puis on veut la meilleure.
Messages postés
30
Date d'inscription
vendredi 22 juillet 2005
Statut
Membre
Dernière intervention
7 mai 2009

Merci amezghal,
mais la ou ce se complique c’est que je ne connais pas le clé de la première valeur du tableau...
Un solution ?
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Salut,

Dans un tableau associatif, il n'y a pas vraiment de "première valeur", puisque justement, les éléments ne sont pas triés.

Cependant, dans la mémoire, ils sont effectivement dans un certain ordre... Mais je ne sais pas si cet ordre est constant ou lié aux registres mémoire utilisés par PHP.

Tu peux toujours essayer foreach et sortir de la boucle dès la première valeur récupérée... Mais je ne suis pas certain que ce soit une manière de faire vraiment pertinente...

Neige
Messages postés
30
Date d'inscription
vendredi 22 juillet 2005
Statut
Membre
Dernière intervention
7 mai 2009

Bonjour Neige !

je croiq pourtant qu'un tableau associatif à bien un ordre.

mon tableau $tableau contient exclusivement des valeurs numériques.
j'effectue un arsort($tableau);
et ca fonctionne très bien !

à présent j'aimerais obtenir la première valeur (donc la plus elevée) mais... je n'y arrive pô.
Si qq1 connais sinon une fonction qui retourne la plus grande valeur d'un tableau, elle fera également mon bonheur.
merci à tous en tout cas.
Hakim
Messages postés
385
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
21 août 2015
2
<?php
$arr = array('cle_1'=>'valeur_1', 'cle_2'=>'valeur_2');
$new_arr = array_keys( $arr );
echo $new_arr[0]; // ça donne "cle_1"
?>
voilà...

Au début, on essaye de trouver une solution qui marche, et puis on veut la meilleure.
Messages postés
30
Date d'inscription
vendredi 22 juillet 2005
Statut
Membre
Dernière intervention
7 mai 2009

Merci infiniement Amezghal, mais ce que je veux c'est la valeur, pas la clé.

C'est pas grave, j'ai trouvé une solution, mais je ne sais pas ce que ca va donner en production.

mes clés et mes valeures étaient issues d'une requete Sql.

à partir de cette requête, au lieu de créer un seul tableau associatif comme jusqu'à présent :
clé = titre (champ dans ma table)
valeur = nombre de clique (autre champs dans ma table)

j'ai créé deux tableaux simple (juste les valeurs) 

$moyen1[] = mes titres
$moyen2[] = mes cliques



//au passage je pique le plus grand nombre de clique (en gros, ce que je cherche depuis le début) avec :

$max =  $moyen2[0];

// et je créer par la suite un tableau associatif avec :



$grand_tabeau = array_combine($moyen1, $moyen2);

je me retrouve donc avec un grand tableau associatif propre et j'ai au passage pris la plus grande valeure numérique de $moyen2[] (mon nombre de clique)

j'ai donc réussi à faire un beau script PHP avec des graphiques satistique en CSS (adieu library GD) du plus belle effet.

Merci à tous !
Hakim
Messages postés
962
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
2 août 2010

Salut,

Bon je sais que tu as déja une solution, mais pour ton problème je suis surpris que personne ne t'ai suggeré array_shift qui dépile le premier élément d'un tableau.. Les éléments d'un tableau ont toujours un ordre (soit l'ordre dans lequel ils sont poussé dans la pile)

par exemple:

$arr = array('cle1'=>'value1',              'cle2'=>'value2',             'cle3'=>'value3');
echo array_shift($arr);

va afficher value1...

Et sinon si c'est juste la plus grande valeure que tu cherchais dans ton tableau la fonction max() t'aurais fait ça :)

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Hello,

array_shift() dépile en effet le premier élément, ce qui n'est pas forcément souhaitable.
Le moyen pourtant simple prévu par la doc auquel personne n'a pensé et qui fait exactement ce que veut hakeem ;-) :
<?php$aTab array('toto'> 'titi', 'bla' => 'blo', 'hello' => 'world');
reset($aTab);
echo key($aTab);
?>
Ici, le reset() n'est évidemment pas nécessaire puisqu'on a pas bougé le pointeur du tableau. Mais c'est juste pour montrer que dans certains cas, c'est nécessaire.
Messages postés
30
Date d'inscription
vendredi 22 juillet 2005
Statut
Membre
Dernière intervention
7 mai 2009

Waouh !
J'avais vraiment mal cherché, merci à toi Yoman ! Le max() fait exactement ce que je voulais !
C’est beaucoup plus propre qu'avec mon array_combine suivi d'autres fonctions, ça évite d'empiler des éléments au fur et à mesure, non seulement je me retrouve avec un beau tableau associatif en fin de requête SQL mais en plus j’économise 5 lignes de code ! (Et donc autant de fonction)

Merci à toi également Malalam car je pensais que le current() ne s'utilisait que si on avait déjà commencé à parcourir le tableau, j’ai donc appris.

Ca marche terrible en tout cas, je vais voir si il n'y a pas de ressource du même genre des les scripts et je posterais peut-être la ressource.

A++ all
hakim.