2013-08-13 9 views
1

J'essaie de supprimer une liste de mots, que j'ai contenus dans un fichier .txt, à partir d'un fichier. Pour ce faire, je lis les deux fichiers en utilisant file_get_contents dans les chaînes et en utilisant str_replace.PHP - str_replace ne fonctionne pas

$names = file_get_contents("countries.txt"); 
$map = file_get_contents("C:\\xampp\\htdocs\\www\\jvectormap\\map\\worldmap.js"); 

$array = explode("\n", $names); 

foreach($array as $val){ 
    $split = explode(" ", $val); 
    $max = count($split); 
    $country = ""; 
    for($x = 1; $x < $max; $x++){ 
     $country = $country . $split[$x]; 
     if($x < ($max-1)){ 
      $country = $country . " "; 
     } 
    } 
    $map = str_replace($country, "", $map); 
} 
echo $map; 

Le "countries.txt" contient les pays dans ce format:

AD Andorra 
BE Belize 
etc. 

..which est pourquoi je me sers d'exploser() pour enlever l'étiquette de pays.

Lorsque j'écho $ map la chaîne contient tous les pays même si str_replace n'a pas généré d'erreur. J'ai essayé d'imprimer $ country pour confirmer qu'il lisait les pays correctement, qu'il était lu dans un tableau puis bouclé dans le tableau, en utilisant str_replace.

+0

Pouvez-vous partager ce que worldmap.js contient. Seulement une partie du fichier si possible. –

Répondre

1

Je pense que vous avez besoin d'une modification dans le code

changement ligne ci-dessous

$array = explode("\n", $names); 

à avec ces

$names = nl2br($names); 
$array = explode("<br />", $names); 

Comme vous travaillez sur la fenêtre qui utilise \r\n pour la nouvelle ligne.

+0

C'est ce qui l'a fixé. Merci beaucoup. C'est pourquoi je déteste travailler avec PHP; tant d'erreurs sont de petites choses délicates comme celle-ci. – user2450099

+0

De rien. Je pense que ce n'est pas le problème de PHP, son problème de gestion du système d'exploitation (Windows et Linux ont leurs propres règles). –

0

Impossible de reproduire.

<?php 
/* Instead of loading countries.txt */ 
$names = "AD Andorra 
BE Belize"; 
$array = explode("\n", $names); 
/* Instead of loading map */ 
$map = "Andorra Belize"; 

$array = explode("\n", $names); 

foreach($array as $val){ 
    $split = explode(" ", $val); 
    $max = count($split); 
    $country = ""; 
    for($x = 1; $x < $max; $x++){ 
     $country = $country . $split[$x]; 
     if($x < ($max-1)){ 
      $country = $country . " "; 
     } 
    } 
    $map = str_replace($country, "", $map); 
} 
var_dump($map); 

Sortie:

string(1) " " 

L'espace est prévu, si vous voulez vous débarrasser utiliser trim(). Toutefois, le remplacement fonctionne correctement, si cela ne fonctionne toujours pas vos fichiers texte peuvent être le problème.