2012-04-08 6 views
0

LE PROCESSUS:array_unique ne fonctionne pas avec des chaînes de noms de fichiers importés de fichier texte

  1. utilisateur vérifie les cases à cocher pour partager des fichiers avec les comptes clients
  2. valeurs Checkbox sont comparées à un tableau stocké dans un fichier txt de la clients dossier
  3. Les réseaux sont comparés en étant fusionnés en un seul tableau en utilisant array_merge()
  4. Les doublons sont éliminés en utilisant array_unique()
  5. un nouveau tableau écrit dans le fichier txt

PROBLÈME:

Si mon fichier texte contient déjà les données suivantes: (numéros représentant des lignes de fichiers texte)

  1. M HTH A277 Frame Off STD Specs 02-01-12.pdf
  2. M HTH A277 Cadre sur les spécifications STD 02-01-12.pdf
  3. M Option HTH Can Liste de prix 02-02- 2012.xls

Ensuite, j'essaie de partager plus de fichiers, y compris ceux qui sont déjà partagés. Mon nouveau fichier texte ressemble à ceci: (chiffres représentant les lignes de fichiers texte)

  1. M HTH A277 Cadre Off STD specs
  2. (blanc)
  3. M HTH A277 Cadre sur les MST spécifications 02-01-12.pdf
  4. (blanc)
  5. M HTH Option Liste des prix peut 02-02-2012.xls
  6. (blanc)
  7. (blanc)
  8. M HTH A277 Cadre Off STD specs
  9. M HTH A277 Cadre sur STD Caractéristiques de
  10. M HTH Option Liste des prix peut 02-02-2012.xls
  11. Valley Creek Estates - 2010.pdf

Les valeurs ci-dessus sont les valeurs exactes auxquelles j'ai affaire. J'ai essayé d'être aussi complet que possible avec cette explication qui pourrait rendre les choses confuses. Si quelqu'un peut me fournir des suggestions, il serait grandement apprécié. Merci d'avance. Voilà ce que j'ai pour le code à ce jour:

CODE:

$arr = $_POST['checked']; 
$cust = $_POST['custname']; 

    if ($cust != ""){ 

     $myFile = "CONTA.txt"; 

     //If file exists get previous array from file 
     if (file_exists("customer/" . $cust . "/" . $myFile)) {   

      $fh = fopen("customer/" . $cust . "/" . $myFile, 'r') or die(""); 

       while (!feof($fh)) { 
         $compare[] = fgets($fh); 
       } 

      fclose($fh); 

      //Combine checkbox array with previous array & eliminate duplicates 

      $combined = array_unique(array_merge($compare,$arr)); 

     } 
     else 
     { 

      //Since no previous file or array existed. Just use current checkbox array.  
      $combined = $arr; 


     } 

     //Input array into file 
     $fh = fopen("customer/" . $cust . "/" . $myFile, 'w') or die("can't open file"); 

      foreach ($combined as $value) { 

        fwrite($fh, $value . "\n"); 

      } 
     echo "<span class='message'>Items shared successfully!</span>"; 
     fclose($fh); 
    } 

} 
+0

Bienvenue sur Stack Overflow! Du Brésil? ("CONTA.txt"; 'ici le mot CONTAR est le même que count, mais prononcé CONTA.) –

Répondre

0

Pour moi, il semble que le problème est le caractère "\ n". Chaque ligne a une nouvelle ligne à la fin et quand vous comparez une ligne qui a le caractère de nouvelle ligne et la même ligne qui ne le sont pas, elles ne sont pas identiques. Je confirmerais cela en faisant écho à chaque ligne des fgets. Si elles sont en ligne, vous savez que vous obtenez le nouveau caractère de ligne.

EDIT:
Je voudrais essayer de mettre
garniture (fgets (fh) $)
par défaut, il doit supprimer les caractères de nouvelle ligne
trim specs

+0

Cela a fait l'affaire. J'avais l'impression que c'était quelque chose de simple. Merci pour la réponse rapide. – Bryan

Questions connexes