Просмотр поста

.
Jahak

Libra, Частенько тут помогаю людям.
Например:
http://johncms.com/forum/index ... 01455

<?php
//искомые слова в виде одномерного массива или слово в виде строки
$search = ['Миша', 'Даша', 'Таня'];
//файл в котором происходит поиск
$filename = 'file.txt';
 
$file = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
 
removeUnnecessary($file, $search);
file_put_contents('new_' . $filename, implode(PHP_EOL, $file));
 
/**
 * Удаляет строки, если $del = false, то удалятся все строки которые не нашлись,
 * а если $del = true, то удалятся все строки которые нашлись. По умолчанию установлен false.
 *
 * @param array        $file
 * @param array|string $search
 * @param bool         $del    false
 *
 * @author Jahak
 */
function removeUnnecessary(&$file, $search, $del = false)
{
    if (is_array($file)) {
        $count = count($file);
        $callable = function ($search, $string) {
            if (is_string($search)) {
                $search = [$search];
            }
            foreach ($search as $s) {
                if (is_string($s) && '' != $s && mb_strpos($string, $s) !== false) {
                    return true;
                }
            }
            return false;
        };
        $searchTrue = [];
        for ($index = 0; $index < $count; ++$index) {
            if ($callable($search, $file[$index]) == true) {
                $searchTrue[] = $index;
                if (isset($file[$index + 1])) {
                    $searchTrue[] = ($index + 1);
                }
            }
        }
        if (!empty($searchTrue)) {
            for ($delString = 0; $delString < $count; ++$delString) {
                if (in_array($delString, $searchTrue) === $del) {
                    unset($file[$delString]);
                }
            }
        }
        unset($searchTrue);
    }
}