Php kullanarak bir sözcük ya da metin ile bir csv dosyası Filtre

3 Cevap php

Ben basit bir kelime filtresi yapmaya çalışıyorum başka bir csv dosyası var. Örneğin, benim text.csv dosyası şuna benzer:

name, age, hobbies
Tom, 8, "football, soccer, baseball, wii, star wars, books"
Bill, 9, "football, baseball, ice hockey, basketball"
Sue, 8, "baseball, soccer, volleyball, bicycles, skating"
Mike, 8, "basketball, music, guitar, cartoons, books"
Ella, 9, "soccer, basketball, softball, clothes, books"
Tim, 9, "football, baseball, basketball, wii, cartoons"
Steven, 8, "baseball, soccer, star wars, cartoons, books"

Ben üçüncü sütuna göre filtre etmek istiyorum. Ben göre filtre Örneğin, "Wii" Ben geri gönderilen satır 1 ve 6 alacak:

Tom, 8, "football, soccer, baseball, wii, star wars, books"
Tim, 9, "football, baseball, basketball, wii, cartoons"

Ben "wii" veya "gitar" ile filtre Eğer ben satır 1, 4, alacak, ve 6. geri gönderdi.

Tom, 8, "football, soccer, baseball, wii, star wars, books"
Mike, 8, "basketball, music, guitar, cartoons, books"
Tim, 9, "football, baseball, basketball, wii, cartoons"

Strpos gibi bir şey iyi ise emin değilim ama - ben php ve diziler de iyi değilim, ama ben preg_match ile karıştırmasını denedim. İşte yaptık ama doğru çalışması için alınamıyor ne:

<?PHP
$firstWord = 'wii';
$secondWord = 'guitar';
$file = fopen('text.csv', 'r');
while (($line = fgetcsv($file)) !== FALSE) 
{  
list($name[], $age[], $hobbies[]) = $line;
if (preg_match($firstWord, $hobbies[0]) || (preg_match($secondWord,     $hobbies[0]) {
echo $name . ',"' .$age . '",' .$hobbies . "<br> \n";
} else {
    echo "A match was not found.<br> \n";
}}
?>

Herhangi bir kodlama yardım takdir edilmektedir. Ayrıca arama duyarlı olması olması güzel olurdu. Okumak için teşekkürler!

3 Cevap

Sen yakınsın. Böyle bir şey çalışması gerekir:

$file  = fopen('text.csv', 'r');

// You can use an array to store your search words, makes things more flexible.
// Supports any number of search words.
$words = array('wii', 'guitar');    
// Make the search words safe to use in regex (escapes special characters)
$words = array_map('preg_quote', $words);
// The argument becomes '/wii|guitar/i', which means 'wii or guitar, case-insensitive'
$regex = '/'.implode('|', $words).'/i';

while (($line = fgetcsv($file)) !== FALSE) {  
    list($name, $age, $hobbies) = $line;

    if(preg_match($regex, $hobbies)) {
        echo "$name, $age, $hobbies<br />\n";
    }
}

Ne harf duyarsız aramalar hakkında. Ben bu iş benim outlook kişilerin listesini amonst yapmak için merak ediyorum. Strtolower daha kullanmak için daha iyi bir fonksiyon) (var mı?

Muhtemelen PHP CSV işleme kütüphaneleri burada belirtmekte yarar var.

http://php.net/manual/en/function.fgetcsv.php

Bu bir dizi, örneğin olarak CSV sonraki satırını döndürür

// csv file contains "col1,col2,col3"
// array = {'col1', 'col2', 'col3'}
$array = fgetcsv($csv);

Sonra sadece İn_Array () veya $ dizi [sütunnum] filtrelemek için bir test kullanabilirsiniz.

Ben dizi arama fonksiyonlarını kullanarak vs çizgi dize bir düzenli ifade kullanarak eğer rağmen hızlı olacaktır emin değilim, bu yüzden muhtemelen test etmeye değer.