Bonjour,
J'ai besoin de prendre d'un tableau les éléments qui possèdent n occurrences ou plus.
Exemple :
tab = 1,2,1,3,4,4
nbOcc = 2
Résultat = 1,4
tab = 1,2,3,1,2,5,1,6
nbOcc = 1
Résultat = 1,2,3,5,6
tab = 1,2,2,1,2,2,2
nbOcc = 3
Résultat = 2
J'ai fais un petit script en PHP pour exemple
2)Il fonctionne bien pour une occurence cherché car c'est un cas traité à part, grâce à 'array_unique()' de PHP.
2)Il fonctionne bien quand on demande 2 ou plus occurrences, cependant, dans le tableau résultat les chiffres copiés sont juste mais parfois en plusieurs.
3)Ce script va traiter plusieurs milliers de résultats, une optimisation ne serai pas de refus
Exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 $nbNum = 1; //le nombre d'occurrences que je cherche $ids=array(5,6,4,5,6); //un tableau avec quelques chiffes $nbIds = count($ids); //le nombre de d'éléments dans le tableau echo "nbIds : " . $nbIds . "<br/>"; //un affichage dans le navigateur $newIds = array(); //tableau de résultat if ($nbNum==1){ //si on veux juste une occurrences de chaque, PHP le gère grâce à 'array_unique' $newIds = array_unique($ids); } else { for($i=0; $i<$nbIds-1; $i++) { $nb=1; //le nombre d'occurrences d'un nombre, 1 la 1ere fois for($j=$i+1; $j<$nbIds; $j++) { if ($ids[$i]==$ids[$j]) //comparaison avec l'élément suivant $nb++; //ils sont égaux alors il y a une occurrence en plus if ($nb==$nbNum){ //si on atteint le nombre d'occurrences cherché $newIds[] = $ids[$i]; //on copie le nombre dans un nouveau tableau break; //et on sort du de la boucle for } } } }print_r($newIds); //pour voir le contenu du tableau
$ids=array(5,6,4,5,6);
$nbNum = 2;
Resultat :
nbIds : 5
Array ( [0] => 5 [1] => 6 )
C'est juste
$ids=array(5,6,4,5,6,5,7);
$nbNum = 2;
Resultat :
nbIds : 7
Array ( [0] => 5 [1] => 6 [2] => 5 )
C'est juste cependant le 5 est présent 2 fois dans le résultat
Ce problème est réglé avec $newIds = array_unique($newIds) Mis tout à la fin avant l’affichage du tableau.
Mais je trouve que c’est lourd au vue du nombre d’actions que je fais et de la taille du tableau qui pourra avoir plusieurs milliers d’éléments
Je souhaiterai avoir votre avis par rapport à l’algorithme et si une optimisation est faisable.
Merci.
Partager