2009-10-19 5 views
36

En PHP, dire que vous avez un tableau associatif comme ceci:Trouver la clé de valeur minimale dans un tableau associatif

$pets = array(
    "cats" => 1, 
    "dogs" => 2, 
    "fish" => 3 
); 

Comment puis-je trouver la clé avec la valeur la plus basse? Ici, je cherche cats.

Y a-t-il une fonction PHP intégrée que j'ai manquée qui fait cela? Il serait également très bien s'il y avait une solution qui représentait plusieurs valeurs identiques, comme ci-dessous:

$pets = array(
    "cats" => 1, 
    "dogs" => 1, 
    "fish" => 2 
); 

Au-dessus, je ne me dérangerait pas si juste sortie soit; cats ou dogs.

Merci d'avance.

Répondre

83

array_keys est votre ami:

$pets = array(
    "cats" => 1, 
    "dogs" => 2, 
    "fish" => 3 
); 
array_keys($pets, min($pets)); # array('cats') 

post-scriptum: il y a un dup ici quelque part sur SO (il avait max au lieu de min, mais je peux m'en souvenir distinctement).

+0

C'est un astucieux =) Peut-être que vous devriez mentionner qu'il renvoie une liste de 1 ou plusieurs valeurs (sauf si le tableau est vide.) – Blixt

+0

J'ai corrigé le commentaire, j'espère que ce sera clair maintenant. – SilentGhost

+0

Merci pour votre réponse. :) –

2
$min_val = null; 
$min_key = null; 
foreach($pets as $pet => $val) { 
    if ($val < $min_val) { 
    $min_val = $min; 
    $min_key = $key; 
    } 
} 

Vous pouvez également retourner le tableau et trier par clé:

$flipped = array_flip($pets); 
ksort($flipped); 

Ensuite, la première clé est le minimum, et sa valeur est la clé du tableau d'origine.

+0

Vous avez oublié de fermer un support. Et en utilisant array_keys et min, comme suggéré par SilentGhost sera plus facile et plus rapide. –

+0

Merci, j'ai réparé le support. –

2

pourrait essayer d'examiner ces:

+4

Les liens ci-dessus sont pour les horribles w3schools, voici les liens manuels PHP appropriés (pour vous sauver un quelques secondes): http://php.net/manual/fr/function.natcasesort.php http://php.net/manual/fr/function.natsort.php –

-2

trouver la plus haute valeur

print max(120, 7, 8, 50); 

retours -> 120

$array = array(100, 7, 8, 50, 155, 78); 
print max($array); 

retours -> 155

trouver la valeur la plus basse

print min(120, 7, 8, 50); 

retours -> 7

$array = array(50, 7, 8, 101, 5, 78); 
print min($array); 

renvoie -> 5

+2

La question est de trouver la clé, pas seulement le val ue – marcovtwout

6

C'est comment je l'ai fait.

$pets = array(
    "cats" => 1, 
    "dogs" => 2, 
    "fish" => 3 
); 

array_search(min($pets), $pets); 

J'espère que cela

Questions connexes