2008-12-07 8 views
1

J'ai créé un tableau en PHP qui contient un bucnh d'horodatages unix.Besoin d'obtenir des index spécifiques sur un tableau PHP

J'essaye de faire une fonction qui retournera un tableau contenant les index des 3 plus grands nombres dans ce tableau.

Par exemple, si le plus grand nombre sont situés à des index 3,5 et 8

Et si le plus grand est de 5, le deuxième est de 8 et le plus petit des trois est le numéro 3, je veux un tableau qui contient les valeurs (5,8,3) dans cet ordre.

Et franchement, je n'ai pas la moindre idée de comment cela fonctionne. Est-ce que quelqu'un sait comment faire cela?

Répondre

7

Vous pouvez utiliser asort pour trier le tableau et maintenir l'index, puis utiliser slice avec le 4ème paramètre, encore une fois pour maintenir l'indice, à grap le nombre supérieur de x d'éléments que vous recherchez, et enfin utiliser array_keys.

Il se peut qu'il y ait un moyen plus rapide, mais c'est juste pour montrer qu'il y a beaucoup de fonctions de tableau PHP pour vous aider à obtenir l'effet que vous recherchez.

+0

Merci, ce a résolu mon problème avec une petite exception. La fonction qui m'a donné les 3 plus grandes valeurs comme les 3 premiers nombres dans le nouveau tableau doit être arsort, au lieu d'asort – Vordreller

+0

Ah, content que cela ait aidé. Sinon, vous auriez pu utiliser array_slice pour découper l'autre extrémité du tableau - mais c'est vraiment la même différence. – Simon

1

Simon a publié la méthode simple et probablement assez performante.

L'autre option, uniquement si vous avez un très grand tableau, est de parcourir le tableau et de garder une trace des index des trois valeurs les plus élevées que vous voyez. C'est O (n), mais (surtout depuis son code PHP interprété, pas une fonction intégrée compilée), probablement plus lent pour tous les tableaux sauf le plus grand.

0

En pseudo-code:

function select(list[1..n], k) 
    for i from 1 to k 
     maxIndex = i 
     maxValue = list[i] 
     for j from i+1 to n 
      if list[j] > maxValue 
       maxIndex = j 
       maxValue = list[j] 
     swap list[i] and list[maxIndex] 
    return list[k] 

newarray[] = select(array, 1); 
newarray[] = select(array, 2); 
newarray[] = select(array, 3); 
-1

Dans le code PHP:

function threeLargest($array){ 
krsort($array, "SORT_NUMERIC"); 
$return[0] = $array[0]; 
$return[1] = $array[1]; 
$return[2] = $array[2]; 
return $return; 
} 
+0

cela n'a pas fonctionné. Pour une raison quelconque, aucune des fonctions de tri pour les tableaux semblent fonctionner dans mon débogueur ... – Vordreller

Questions connexes