Поиск значений в массиве PHP, которые начинаются с определенного слова

Я загружаю текстовый файл в массив:

<?php

$filename = "data.txt";

$array = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

?>

Файл содержит определенные строки, которые начинаются со слова "Данные". Эти строки загружаются как отдельные значения в массиве.

То, что я хочу сделать, это извлечь только эти значения из массива и сохранить их в виде отдельного файла, каждое в новой строке.

Как мне искать эти конкретные значения в массиве и делать выше?

3 ответа

Когда у вас есть строки вашего файла в массиве, вы застреваете с итерацией по массиву (строк) и проверяете, начинается ли строка с данных (0 === mb_strpos($line, 'Data')). Если это так, вы просто сохраняете строку в другой файл с fwrite(),

Или вы могли бы бежать grep в консоли:

grep '^Data' input.txt > output.txt

Следующий код извлечет все строки, начинающиеся с "Данные" (с учетом регистра), и добавит их в файл "data_rows.txt".

$filename = "data.txt";
$array = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

foreach( $array as $item ) {
    if( strpos($item, "Data") === 0 ) {
        file_put_contents("data_rows.txt", "{$item}\n", FILE_APPEND);
    }
}

Если у вас есть массив, вы можете фильтровать значения с помощью функции array_filter. http://php.net/manual/en/function.array-filter.php Функция обратного вызова должна возвращать true, если вы хотите оставить элемент в массиве, или false, если вы хотите сбросить его, например, потому что этот элемент является diffrent тогда ты ищешь. Внутри функции вы должны проверить, есть ли слова, которые вы ищете или нет.

Используйте preg_match для проверки значения элемента и регулярных выражений. http://php.net/manual/en/function.preg-match.php

Полезная ссылка для тестовых регулярных выражений: https://regex101.com/

Просто!

Пример:

<?php
    $arrayData = [
        'DATA: something',
        'DATA: carrot',
        'DATA: coffee',
        'Mercedes-Benz C32 AMG',
        'DATA: hot coffee'
    ];
    function checkArray($value){
        $re = '/^DATA:(.*)coffee(.*)/m';
        if (preg_match($re, $value)) {
            return true;
        } else {
            return false;
        }
    }
    $filtered = array_filter($arrayData, 'checkArray');
    var_dump($fitlered);
Другие вопросы по тегам