2010-07-13 5 views
0

J'ai un site Web où ma base de données est mis en place avec différents artistes et titres de chansons dans la même ligne, où il pourrait ressembler à ceci:Comment supprimer uniquement des valeurs entièrement dupliquées d'un tableau?

artist: The Monkees, title: I'm A Believer 
artist: The Monkees, title: Daydream Believer 
artist: The Hollies, title: The Air That I Breathe 
artist: The Hollies, title: Bus Stop 
artist: The Beatles, title: Hello, Goodbye 
artist: The Beatles, title: Yellow Submarine 

Et j'ai un widget autocomplete mis en place avec le formulaire de recherche de mon site est alimenté par un tableau json_encoded rempli de valeurs 'artist'.

Le premier problème est que si un utilisateur devait commencer à taper "la" dans le formulaire de recherche, les valeurs viendrais comme ceci:

Les Monkees
Les Monkees
Les Hollies
The Hollies
les Beatles
les Beatles

J'utilise la fonction array_unique pour supprimer les valeurs en double, mais il semble que la veille n si une valeur a un mot en double (ce cas étant « le »), il est supprimé entièrement, de sorte que la première valeur est retournée:

Les Monkees

Lorsque la sortie, je voudrais avoir serait:

Les Monkees
The Hollies
Les Beatles

Alors, ce qui pourrait être une autre façon que je peux supprimer ces duplicate val ues et les afficher comme je le voudrais?

EDIT:

Voici mon code source:

<?php 

include 'includes/config.php'; 

$return_arr = array(); 
$term = ($_GET['term']); 

if ($con) 
{ 
$artist = mysql_query("SELECT * FROM songs WHERE artist LIKE '%$term%' LIMIT 0, 5"); 
while ($row = mysql_fetch_array($artist, MYSQL_ASSOC)) { 

$row_array['value'] = strtolower($row['artist']); 

array_push($return_arr,$row_array); 
    } 
} 

mysql_close($con); 

echo json_encode(array_unique($return_arr)); 
?> 
+1

Qu'en est-il juste de les filtrer dans la requête SQL en utilisant 'GROUP'? – deceze

+0

Votre intuition est fausse, le bug n'est pas dans array_unique. Montrez-nous du code. –

+0

Ajouté ma source. En fait, je sais que ce n'est pas un bug, je pense que c'est juste comme fonctionne array_unique? Je ne comprends pas entièrement. Je cherche donc une explication et peut-être une solution. – user389956

Répondre

2

array_unique utilise une comparaison stricte. Les différences de cas et d'espaces sont donc prises en compte. Étant donné que toutes ces valeurs semblent être des chaînes, c'est probablement la raison pour laquelle array_unique ne fonctionne pas comme prévu.

La structure de votre base de données rend très difficile l'élimination des doublons. Je proposerais de le refactoriser dans une table d'artistes et une table de chansons, où les chansons se réfèrent simplement à l'id de l'artiste. Cela vous donnera une meilleure chance de garder votre liste d'artistes unique.

En outre, une chose que je ferais pour votre autocomplete est mis en place pour ignorer certaines chaînes. ('a', 'an', 'the') Ceux-ci sont connus comme des mots vides, et les résultats de recherche d'aide sont plus pertinents en n'effectuant pas une recherche sur des mots communs.

+0

La meilleure idée est en effet de recréer votre base de données. Votre blob sur une seule colonne rendra toute autre solution assez pénible. – meagar

Questions connexes