#php
#php
Вопрос:
Вопрос:
Я пытаюсь выполнить поиск строки в файле и напечатать только первую строку выше и вторую строку ниже строки соответствия для всех вхождений строки. Есть ли способ добиться этого с помощью PHP-скрипта? (будет обновляться веб-страница с выводом) не удалось найти решение, отличное от использования оболочки grep / awk, которую я не могу использовать.
Содержимое файла:
"timeUpdated":1533998971008
"name":"ABC"
"uptime":5143980267
"desiredStatus":"STARTED"
"lastReportedStatus":"STARTED"
"started":true
"serverArtifacts":[{"id":73
"timeUpdated":1525213888405
"name":"XYZ"
"uptime":6746828144F
"desiredStatus":"STARTED"
"lastReportedStatus":"STARTED"
"started":true
"serverArtifacts":[{"id":21
"timeUpdated":1544131291380
"name":"KLM"
"uptime":6746828643
"desiredStatus":"STARTED"
"lastReportedStatus":"STARTED"
"started":true "serverArtifacts":[{"id":303
search for string: uptime -> print first line above (name:) and second line blow (lastReportedStatus:)
note: I can only use "uptime" as a search string since all other value pairs occur multiple times in a different sequence on other parts of the file.
expected output:
"name":"ABC"
"lastReportedStatus":"STARTED"
"name":"XYZ"
"lastReportedStatus":"STARTED"
"name":"KLM"
"lastReportedStatus":"STARTED"
Комментарии:
1. Содержимое этого файла почти похоже на JSON
2. Да, PHP мог бы это сделать. Какой код вы уже пробовали?
Ответ №1:
Если вы считываете строки в файле в массив:
$lines = file('file.txt', FILE_IGNORE_NEW_LINES);
Затем вы можете просто отслеживать ключ при повторении массива и находить строки относительно строки с «временем безотказной работы», используя простое сложение / вычитание по ключу.
foreach ($lines as $key => $line) {
if (substr(trim($line),0, 8) == '"uptime"') {
$result[] = $lines[$key - 1];
$result[] = $lines[$key 2] ?? '';
}
}
Возможно, вам потребуется добавить FILE_SKIP_EMPTY_LINES
опцию в file()
, если между каждой строкой вашего файла действительно есть пустые строки. Я не был уверен, что это было именно так в вопросе здесь.
Мне любопытно, откуда берутся данные файла. Это очень близко к JSON, и если бы был какой-либо способ получить его до конца в исходном коде, нам не пришлось бы иметь дело с этим таким халтурным способом здесь. Этот код будет работать для примера, который вы показали, но он не идеален.