如何在php中从包含特定单词的数组中去除文件

我在文件夹中有一些.txt文件。每个文件有 6 行。我的文件看起来像这样:messages


id_20197456 // identity

Friends //category

Test // title

10 Feb 2020 22:28 // date

John // writer

Lorum ipsum.... // message

类别的名称始终在第二行


我总共有5个文件:4个类别,1个类别。现在我想去掉具有类别的文件FriendsOffsideOffside


这就是我到目前为止所拥有的,以捕获带有类别的文件:Offside


$filterthis = strtolower('Offside');

$newslist = array();


$files = glob("messages/*.txt"); // Specify the file directory by extension (.txt)


foreach($files as $file) { // Loop through the files in the directory   


    $handle = @fopen($file, "r");


    if ($handle) {


        $lines = file($file); //file into an array


        $buffer = $lines[1]; // grab category line


        if(strpos(strtolower($buffer), $filterthis) !== FALSE) { // strtolower; search word not case sensitive  


                $newslist[] = $file; // The filename of the match

                // below the file which has Offside category

                print_r($newslist); // outputs: Array ( [0] => messages/id_20200210222825.txt )                 

        }

        fclose($handle);

    }

}


为了输出所有文件,我使用一个foreach循环:


foreach($newslist as $file) {

    $lines = file($file, FILE_IGNORE_NEW_LINES); // filedata into an array


    $file_id = $lines[0]; // file id

    $news_category = $lines[1]; //  news category

    $news_title = $lines[2]; //  news title

    $news_date = $lines[3]; // news date

    $news_author = $lines[4]; //  author name

    $news_message = $lines[5]; // news message


    fclose($fh);


    // all the echos's come here...

}

我的问题:如何过滤在前程中没有类别的文件?所以前期应该输出所有的文件,除了那些有类别的文件?OffsideOffside


萧十郎
浏览 80回答 1
1回答

波斯汪

array_diff将完成这项工作抓取文件夹中的所有文件:messages// read all files in messages folder$dir = 'messages/';if ($dh = opendir($dir)) {    while(($file = readdir($dh))!== false){        if ($file != "." && $file != "..") { // This line strips out . & ..            $newslist[] = $dir.$file;                               }           }}closedir($dh);现在过滤哪个类别中的文件越位(你已经这样做了)// Strip file(s) with category Offside  $strip_cat = strtolower('Offside');$offside_array = array();$files = glob("messages/*.txt"); // Specify the file directory by extension (.txt)foreach($files as $file) { // Loop through the files in the directory       $handle = @fopen($file, "r");    if ($handle) {        $lines = file($file); //file into an array        $buffer = $lines[1]; // grab category line        if(strpos(strtolower($buffer), $strip_cat) !== FALSE) { // strtolower; search word not case sensitive                   $offside_array[] = $file; // The filename of the match(es)        }        fclose($handle);    }}现在比较 2 个数组:// compare the arrays and strip out the files which contain cat Offside$filtered_newslist = array_diff($newslist, $offside_array);$filtered_newslist 是您的新数组,其中包含除具有类别的文件之外的所有文件Offside您的前循环:foreach($filtered_newslist as $file) {    $lines = file($file, FILE_IGNORE_NEW_LINES); // filedata into an array    $file_id = $lines[0]; // file id    // and so on...}
打开App,查看更多内容
随时随地看视频慕课网APP