2011-11-06 5 views
0

J'ai besoin de savoir si une certaine chaîne est trouvée dans un fichier CSV en PHP. La chaîne peut être trouvée dans n'importe lequel des champs de ma liste CSV.Rechercher array de CSV

liste CSV est comme:

"John Doe", "[email protected]", "other information", "0800-0880880", "still some info" 
"Other John", "other information" 

etc, de sorte que les lignes dans mon CSV ne contiennent pas les mêmes informations.

Je veux savoir si l'une des chaînes se trouve dans l'un des champs de toute façon.

C'est ce que j'ai essayé (et oui, je suis assez mauvais en PHP):

<?php 
$file_handle = fopen("csv.txt", "r"); 
$words = array('john', '[email protected]'); 
$words = array_map('preg_quote', $words); 
$regex = '/'.implode('|', $words).'/i'; 

while (($line = fgetcsv($file_handle)) !== FALSE) { 
list($name, $age, $hobbies) = $line; 
if(in_array($regex, $line)) { 
    echo "found"; 
} 
} 

Cependant, ce ne marche pas tout écho.

Répondre

0

Au lieu de réinventer la roue, utilisez la fonction fgetcsv(). Une fois que vous avez vos données, utilisez in_array() pour voir si chaque ligne contient vos données de recherche.

in_array() n'utilise pas de regex, c'est une chaîne de caractères (pas même une sous-chaîne).

0

Essayez de remplacer l'intérieur de la boucle while (qui utilise déjà getcsv()) avec quelque chose comme ceci:

foreach ($line as $elt) { 
    if (preg_match($regex, $elt)) { 
     echo "found match in: " . $elt . "\n"; 
    } 
}