2011-04-05 3 views
1

Je suis coincé à travailler sur un problème et j'apprécierais quelques conseils. Je travaille avec un ancien système qui a été codé terriblement, et je n'ai pas fait de validation ou de sanitzing des entrées des utilisateurs, donc la base de données avec laquelle je travaille est un peu bizarre.Mysql Résultats et manipulation de la matrice

J'ai des problèmes avec une colonne appelée "balises", utilisée pour les balises pour les articles. Mais chaque ligne apparaît comme celui-ci, et varie entre eux:

tag balise1 tag2 tag3

OU

balise1, tag2, étiquette

Mais je dois les combiner et les mettre dans un tableau qui les énumère par combien de fois chacun se produit, comme ceci:

  • tag (2)
  • balise1 (2)
  • tag2 (2)
  • tag3 (1)

Parce que je ne suis pas le plus astucieux avec php, je ne sais pas si je vais sur le problème correctement? Je ne suis pas habitué à manipuler des tableaux sur cette échelle, c'est pourquoi je suis bloqué à ce stade. Vous pouvez voir l'exemple ci-dessous de ce que je fais ci-dessous:

$sql = "SELECT tags, approved FROM articles WHERE approved = '1' "; 
    $result = mysql_query($sql); 

while($rows = mysql_fetch_array($result)) { 
    $arr = $rows['tags']; 
    $arr = str_replace(", ", " ", $arr); // attempting to clean up the data, so that each word appends with a space. 
    $arr = str_replace(" ", " ", $arr); 

    // Don't know what to do next, or if this is even the right way to do it. 

} 

Toute aide est appréciée.

Merci, Lea

+0

Je pense que je suis bloqué parce que le script affiche un tableau pour chaque ligne, et je ne suis pas sûr de savoir comment s'y prendre pour la manipulation, et toutes mes tentatives de la dernière heure ont échoué – Lea

+0

Vous pouvez convertir une chaîne en un array avec la fonction 'explode'. – FrustratedWithFormsDesigner

+0

@FrustratedWithFormsDesigner - Vrai, mais cela ne concerne pas le formatage de chaque ligne de données. Elle place dans un tableau comme: array() { [0] => balise, balise1, tag3, TAG4 [1] => balise, tag2, tag6, tag7 } – Lea

Répondre

2

Peut-être que ce sera utile. Modification de votre code pour avoir un $tagArr pour chaque requête. Si vous avez besoin d'un tableau global de tags, ce serait un peu différent, mais pourrait facilement être codé en utilisant ce qui suit.

while($rows = mysql_fetch_array($result)) { 
    $arr = $rows['tags']; 
    $arr = str_replace(", ", " ", $arr); // attempting to clean up the data, so that each word appends with a space. 

    // Don't know what to do next, or if this is even the right way to do it. 

    $tagArr = array(); 
    $current_tags = explode(" ", $arr); 
    foreach($current_tags as $tag) { 
    if(!array_key_exists($tag, $tagArr)) { 
     $tagArr[$tag] = 1; 
    } else { 
     $tagArr[$tag] = $tagArr[$tag]++; 
    } 
    } 

    // now $tagArr has the tag name as it's key, and the number of occurrences as it's value 
    foreach($tagArr as $tag => $occurrences) { 
    echo $tag . '(' . $occurrences . ')<br />'; 
    } 
} 
+0

Pas besoin de l'* espace str_replace avec espace * ligne. – simshaun

+0

Ok merci. Comment l'utiliser pour sortir la liste? – Lea

+1

@Lea Mise à jour du code. J'ai juste traversé le nouveau tableau '$ tagArr' et j'ai fait écho à l'information. Également supprimé le 'str_replace' inutile. –

Questions connexes