2012-08-27 3 views
1

J'ai cette petite tâche que j'essaie d'accomplir en PHP/MySQL.Comparer des entrées dans un tableau et supprimer des doublons (PHP, MySQL)

Nous collectons des numéros de fax (et d'autres données) auprès des clients que nous utiliserons au cas où nous aurions un problème avec nos opérations dans l'entreprise pour laquelle je travaille (pas dans la programmation, ne vous inquiétez pas).

Fondamentalement, j'ai un tableau qui ressemble à quelque chose comme ça.

Array 
    [1] 
     [company] => "Company A" 
     [fax] => "031-558330" 

    [2] 
     [company] => "Company B" 
     [fax] => "031558330" 

    [3] 
     [company] => "Company C" 
     [fax] => "12345" 

Notez que [fax] est en fait un double en 1 et 2 si vous supprimez le tiret (-).

Mon problème est que je dois supprimer [2], car il s'agit d'une copie de [1]. Fondamentalement, j'essaye de lister des numéros de fax uniques et d'imprimer le nom de compagnie de ce numéro de fax unique.

Jusqu'à présent, je l'ai fait ceci:

function format_text($text,$number) 
{ 
    $text = str_ireplace(" ","",$text); 
    $text = str_ireplace("-","",$text); 
    $text = str_ireplace(",","",$text); 
    $text = str_ireplace("/","",$text); 
    $text = str_ireplace("+46","0",$text); 
    $text = trim($text); 

    return $text; 
} 


$fax_result = mysql_query("SELECT fax,company FROM beredskap GROUP BY company") or die(mysql_error()); 

for($i = 0; $fax_array[$i] = mysql_fetch_assoc($fax_result); $i++) ; 
array_pop($fax_array); 

for($i = 0; $i<count($fax_array);$i++) 
{ 
    $fn = format_text($fax_array[$i]['fax']); 
    if(!empty($fn)) { 
    echo trim($fax_array[$i]['company']) .",". $fn ."\n"; 

    } 
} 

Je n'ai pas la moindre idée de la façon dont je suis censé comparer deux sous-éléments (comme les données brutes de SQL pourraient avoir des différences en eux, mais quand dépouillé des tirets et des virgules est dupliqué à d'autres entrées), puis supprimez la clé parent.

J'espérais sincèrement avoir posé cette question correctement.

Toute personne disposée à vous aider? Merci!

+0

vérifier cela http://stackoverflow.com/questions/11777160/comparing-array-in-php il peut aider –

+0

en question il y a un tableau correspondant algorithme par lequel vous pouvez également supprimer l'élément correspondant –

+0

Merci Mayank! eggyal (ci-dessous) réellement "pincé" ceci dans l'œuf - avant qu'il ne soit jamais entré dans PHP et est devenu un problème, avec son/sa sorcellerie SQL. Merci pour votre aide si! – mescon

Répondre

0

Vous pouvez le faire dans SQL:

SELECT company, 
     TRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(fax, 
      ' ', ''), 
      '-', ''), 
      ',', ''), 
      '/', ''), 
      '+46', '0') 
     ) AS faxno 
FROM  beredskap 
GROUP BY faxno 

Notez que lorsque le même numéro de fax apparaît dans la table contre différentes sociétés, la requête ci-dessus choisira une de ces sociétés pour une période indéterminée. Si, dans ce cas, vous préférez choisir une entreprise en particulier, veuillez clarifier la manière dont vous déterminez l'entreprise à sélectionner. Notez également que ce regroupement entraînera plusieurs entrées dans le jeu de résultats pour une seule entreprise si cette société a des enregistrements avec différents numéros de fax dans le tableau beredskap, alors que votre requête initiale aurait choisi de manière indéterminée un seul numéro de fax de cette société . Si ce n'est pas votre comportement souhaité, veuillez clarifier comment on détermine le numéro de fax à sélectionner.

+0

Merci beaucoup! J'essaie celui-ci. Si la même société apparaît deux fois - c'est bien, car une entreprise peut avoir 5 visages différents, ils veulent nous envoyer un fax en cas d'urgence. J'essaye celui-ci et rends compte. – mescon

+0

Es-tu .... es-tu un dieu? Cela fonctionne EXACTEMENT comme j'espérais. Je suis si envieux de votre magie logique. Merci beaucoup. J'espère que d'autres personnes dans ma situation (et ma capacité/expérience limitée) verront votre solution élégante. Corrigez le problème avant qu'il n'entre dans PHP. – mescon

Questions connexes