2010-10-24 13 views
2

J'ai un tableau de balises extraites d'une base de données MySQL. Évidemment, ces étiquettes sont des chaînes et sont stockées dans un tableau, avec un élément dans le tableau stockant chaque étiquette. Pour créer mon nuage de tags, je veux être capable de compter les occurrences de chaque tag pour trouver le tag le plus commun.Recherche des valeurs dans un tableau ayant le plus d'occurrences

Par exemple, si je le tableau ci-dessous ...

tag1 
tag1 
hi 
bye 
gnu 
tux 
tag1 
tux 
tux 
tag1 
... 
etc

... l'étiquette se produisant le plus souvent est « balise1 » ce que je veux faire est de compter combien de fois que tag se produit dans le tableau. Max() n'aide pas ici car il n'aime que les valeurs numériques.

Répondre

9

utilisation array_count_values ​​

<?php 
$array = array(1, "hello", 1, "world", "hello"); 
print_r(array_count_values($array)); 
?> 


Array 
(
    [1] => 2 
    [hello] => 2 
    [world] => 1 
) 

http://php.net/manual/en/function.array-count-values.php

si vous ne voulez pas la version sensible à la casse utilisation:

$ar = array_count_values(array_map('strtolower', $ar)); 
5

Je suppose que vous pourriez avoir votre base de données effectuer tout le levage lourd pour toi. On dirait que vous obtenez un tableau de balises, peut-être comme celui-ci

SELECT tag FROM mytable; 

Mais vous pouvez le faire

SELECT tag,count(*) AS occurrences FROM mytable 
GROUP BY tag 
ORDER BY occurences; 

Hey presto, une liste des balises et leur fréquence!

+0

fait les balises sont stockées sous la forme d'une liste CSV dans la base de données, mais oui, je fais obtenir un tableau d'entre eux - 'explode()' est très pratique! (PHP) – Bojangles

+0

Aussi, j'ai utilisé la solution que j'ai marquée correcte, mais quand vient le temps d'avoir une bonne réécriture, j'utiliserai certainement cette méthode - merci. – Bojangles

0

si vous tableau est comme ce

$array = array('tag1','tag1','hi','bye','gnu','tux','tag1','tux','tux','tag1'); 

$arrayCounting = array_count_values($array)); 

vous donnera un tableau comme celui-ci à travailler avec

Array 
(
    [tag1] => 4 
    [hi] => 1 
    [bye] => 1 
    [gnu] => 1 
    [tux] => 3 
) 
+0

Et si vous ne savez pas ce que sont les éléments du tableau? –

+0

Je ne suis pas sûr de ce que vous voulez dire http://stackoverflow.com/users/5294439/michael-ozoemena cette technique ne se limite pas à connaître les valeurs –

+0

Oubliez ça. En utilisant cette méthode, comment puis-je obtenir le contenu de l'élément le plus présent dans le tableau. Comment puis-je l'obtenir à la sortie "tag1" en gardant à l'esprit que je ne connais pas l'existence de "tag1". –