Поиск строки в текстовом файле и печать после появления пробела в PHP

Это может быть легко, но не для меня.

У меня есть эта функция:

function pingAddress($ip) {
    // Read from file
    $lines = file('F:\share\result.txt');
    foreach($lines as $line)
    {
        // Check if the line contains the string we're looking for, and print if it does
        if (strpos($line, $ip) !== false)
            echo $line;
    }
}

Текстовый файл выглядит так:

192.168.50.104 UP
192.168.50.105 UP
192.168.50.106 DOWN
192.168.50.107 UP

Если я даю ip 192.168.50.1, например, он возвращает все строки от 192.168.50.1 до 192.168.50.199, и мне нужно, чтобы он возвращал только эту конкретную строку и, если возможно, только то, что после ip: UP или DOWN.

Помощь была бы кстати :-)

Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
1
0
67
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Просто добавьте «возврат»; после "echo $line;" Функция останавливается после того, как найдена искомая строка.

function pingAddress($ip) {
    // Read from file
    $lines = file('F:\share\result.txt');
    foreach($lines as $line)
    {
        // Check if the line contains the string we're looking for, and print if it does
        if (strpos($line, $ip) !== false)
            echo $line;
            return;
    }
}

Вам нужно будет проверить, что после IP-адреса есть пробел, чтобы убедиться, что это полный адрес, а не часть другого IP-адреса.

Я также изменил это так, чтобы он читал файл построчно, поэтому, если он находит IP-адрес, он прекращает чтение (и возвращает UP или DOWN). Это экономит чтение всего файла перед поиском...

function pingAddress($ip) {
    // Add space for search
    $ip .= ' ';
    $fp = fopen("a.csv", "r");
    while ( $line = fgets($fp) )
    {
        // Check if the line contains the string we're looking for, and print if it does
        if (strpos($line, $ip) !== false)
            return trim(substr($line, strlen($ip)));
    }
    fclose($fp);
    return '';
}
Ответ принят как подходящий

Используя strpos(), вы принимаете частичные совпадения, в результате чего 192.168.50.1 будет соответствовать всем вашим примерам.

Вместо этого разделите строку на пробел и проверьте полное соответствие IP. Затем вы можете вернуть часть UP или DOWN.

function pingAddress($ip) {
    // Read from file
    $lines = file('F:\share\result.txt');
    foreach($lines as $line){
        $parts = explode(' ', $line);
        if ($parts[0] == $ip){
            return $parts[1];
        }
    }
}

echo pingAddress('192.168.50.1'); // nothing returned
echo pingAddress('192.168.50.105'); // UP

Можно ли также добавить цвет фона для UP и DOWN? как echo "<p style='background-color:lime'>"; и echo "<p style='background-color:red'>";

user11989059 23.12.2020 06:27

Да, если вы сохраняете возвращаемое значение в переменной, вы можете использовать простой if/else, например if ($result == 'UP'){ // echo lime } else { // echo red }

MrCode 24.12.2020 11:56

Другие вопросы по теме