Добрый день, уважаемые форумчане Помогите пожалуйста Программа пишет лог в файл в следующем формате.: Код (Text): {"T":"2023-03-02T20:50:39.914421885+03:00","QH":"clck.yandex.net","QT":"A","QC":"IN","CP":"","Answer":"pAAQABwA","Result":{"Rules":[{"Text":"||clck.yandex.net^$important"}],"Reason":3,"IsFiltered":true},"IP":"192.168.10.192","Elapsed":2413266} {"T":"2023-03-02T20:52:19.388678105+03:00","QH":"otn1.samsungcloudcdn.com","QT":"A","QC":"IN","CP":"","Answer":"tc3VuZ2Nsb","Result":{},"Upstream":"tls://dns.google:853","IP":"192.168.10.130","Elapsed":4977937,"Cached":true} {"T":"2023-03-02T20:52:22.648013244+03:00","QH":"appboot.netflix.com","QT":"A","QC":"IN","CP":"","Answer":"OlCBgb2","Result":{"Rules":[{"Text":"||netflix.com^$important"}],"Reason":3,"IsFiltered":true},"IP":"192.168.10.130","Elapsed":8480623} Понадобилось разложить лог на массив, что бы вытаскивать некоторые данные. PHP: $data = '/opt/AdGuardHome/data/querylog.json'; // лог $cont_data = (file($data)); if (!is_array($cont_data)) die(" Error! Is not array \n"); Считав файл получил одномерный массив в котором строки стали значениями. Но естественно это не приблизило к тому что требовалось. PHP: Array ( [0] => {"T":"2023-03-02T20:50:39.914421885+03:00","QH":"clck.yandex.net","QT":"A","QC":"IN","CP":"","Answer":"pAAQABwA","Result":{"Rules":[{"Text":"||clck.yandex.net^$important"}],"Reason":3,"IsFiltered":true},"IP":"192.168.10.192","Elapsed":2413266} [1] => {"T":"2023-03-02T20:52:19.388678105+03:00","QH":"otn1.samsungcloudcdn.com","QT":"A","QC":"IN","CP":"","Answer":"tc3VuZ2Nsb","Result":{},"Upstream":"tls://dns.google:853","IP":"192.168.10.130","Elapsed":4977937,"Cached":true} [2] => {"T":"2023-03-02T20:52:22.648013244+03:00","QH":"appboot.netflix.com","QT":"A","QC":"IN","CP":"","Answer":"OlCBgb2","Result":{"Rules":[{"Text":"||netflix.com^$important"}],"Reason":3,"IsFiltered":true},"IP":"192.168.10.130","Elapsed":8480623} ) Почитав интернет, понял, что необходимо пройти по значениям в цикле и перевести их в массив. Нашел, что это можно сделать командой preg_split, для чего попробовал следующий цикл: PHP: $data = '/opt/AdGuardHome/data/querylog.json'; // лог [LIST=1] [*]$cont_data = (file($data)); [*]if (!is_array($cont_data)) die(" Error! Is not array \n"); [/LIST] foreach ($cont_data as $key => $val) { $cont_array = preg_split('/[,]/u', $val, -1, PREG_SPLIT_NO_EMPTY); } В результате получил много мелких отдельных массивов, при этом в значения записался "мусор" который не нужен. Например скобки {. То есть опять не то. PHP: Array ( [0] => {"T":"2023-03-02T20:50:39.914421885+03:00" [1] => "QH":"clck.yandex.net" [2] => "QT":"A" [3] => "QC":"IN" [4] => "CP":"" [5] => "Answer":"pAAQABwA" [6] => "Result":{"Rules":[{"Text":"||clck.yandex.net^$important"}] [7] => "Reason":3 [8] => "IsFiltered":true} [9] => "IP":"192.168.10.192" [10] => "Elapsed":2413266} ) Array ( [0] => {"T":"2023-03-02T20:52:19.388678105+03:00" [1] => "QH":"otn1.samsungcloudcdn.com" [2] => "QT":"A" [3] => "QC":"IN" [4] => "CP":"" [5] => "Answer":"tc3VuZ2Nsb" [6] => "Result":{} [7] => "Upstream":"tls://dns.google:853" [8] => "IP":"192.168.10.130" [9] => "Elapsed":4977937 [10] => "Cached":true} ) Array ( [0] => {"T":"2023-03-02T20:52:22.648013244+03:00" [1] => "QH":"appboot.netflix.com" [2] => "QT":"A" [3] => "QC":"IN" [4] => "CP":"" [5] => "Answer":"OlCBgb2" [6] => "Result":{"Rules":[{"Text":"||netflix.com^$important"}] [7] => "Reason":3 [8] => "IsFiltered":true} [9] => "IP":"192.68.10.130" [10] => "Elapsed":8480623} ) И всё, дальше я уткнулся и не понимаю, как из исходных строк сделать нормальный многомерный массив. Пробовал разные примеры из интернета, но к сожалению, большинство сайтов просто перепечатывает или справку или код друг у друга В результате инете ответа на свой вопрос не нашел, ну или не правильно формулировал запросы. Подскажите, хотя бы примерное направление куда смотреть, что бы получить из исходных данных вот такой многомерный массив (массив нарисован руками) PHP: Array ( [0] => Array ( [T] => 2023-03-02T20:50:39.914421885+03:00 [QH] => clck.yandex.net [QT] => A [QC] => IN [CP] => [Answer] => pAAQABwA [Result] => Array ( [Rules] => Array ( [Text] => ||clck.yandex.net^ [Reason] => 3 [IsFiltered] => true ) ) [IP] => 192.168.10.192 [Elapsed] => 2413266 ) [1] => Array ( [T] => 2023-03-02T20:52:19.388678105+03:00 [QH] => otn1.samsungcloudcdn.com [QT] => A [QC] => IN [CP] => [Answer] => tc3VuZ2Nsb [Result] => Array ( [Rules] => Array ( ) ) [IP] => 192.168.10.130 [Elapsed] => 4977937 [Cached] => true ) [2] => Array ( [T] => 2023-03-02T20:52:22.648013244+03:00 [QH] => appboot.netflix.com [QT] => A [QC] => IN [CP] => [Answer] => pAAQABwA [Result] => Array ( [Rules] => Array ( [Text] => ||netflix.com^ [Reason] => 3 [IsFiltered] => true ) ) [IP] => 192.168.10.130 [Elapsed] => 8480623 ) )
PHP: foreach ( new SplFileObject( 'numbers.txt', 'r' ) AS $id => $line ) { trim + json_decode - гугли эти функции }
PHP: <?php // $data = '/opt/AdGuardHome/data/querylog.json'; // лог // $input = file($data); $input = [ 0 => '{"T":"2023-03-02T20:50:39.914421885+03:00","QH":"clck.yandex.net","QT":"A","QC":"IN","CP":"","Answer":"pAAQABwA","Result":{"Rules":[{"Text":"||clck.yandex.net^$important"}],"Reason":3,"IsFiltered":true},"IP":"192.168.10.192","Elapsed":2413266}', 1 => '{"T":"2023-03-02T20:52:19.388678105+03:00","QH":"otn1.samsungcloudcdn.com","QT":"A","QC":"IN","CP":"","Answer":"tc3VuZ2Nsb","Result":{},"Upstream":"tls://dns.google:853","IP":"192.168.10.130","Elapsed":4977937,"Cached":true}', 2 => '{"T":"2023-03-02T20:52:22.648013244+03:00","QH":"appboot.netflix.com","QT":"A","QC":"IN","CP":"","Answer":"OlCBgb2","Result":{"Rules":[{"Text":"||netflix.com^$important"}],"Reason":3,"IsFiltered":true},"IP":"192.168.10.130","Elapsed":8480623}', ]; $output = []; foreach($input as $json) { $output[] = json_decode($json, true); } echo $output[2]['Answer']; //OlCBgb2 echo $output[2]['IP']; //192.168.10.130 print_r($output); ?> Спойлер: $output Код (Text): Array ( [0] => Array ( [T] => 2023-03-02T20:50:39.914421885+03:00 [QH] => clck.yandex.net [QT] => A [QC] => IN [CP] => [Answer] => pAAQABwA [Result] => Array ( [Rules] => Array ( [0] => Array ( [Text] => ||clck.yandex.net^$important ) ) [Reason] => 3 [IsFiltered] => 1 ) [IP] => 192.168.10.192 [Elapsed] => 2413266 ) [1] => Array ( [T] => 2023-03-02T20:52:19.388678105+03:00 [QH] => otn1.samsungcloudcdn.com [QT] => A [QC] => IN [CP] => [Answer] => tc3VuZ2Nsb [Result] => Array ( ) [Upstream] => tls://dns.google:853 [IP] => 192.168.10.130 [Elapsed] => 4977937 [Cached] => 1 ) [2] => Array ( [T] => 2023-03-02T20:52:22.648013244+03:00 [QH] => appboot.netflix.com [QT] => A [QC] => IN [CP] => [Answer] => OlCBgb2 [Result] => Array ( [Rules] => Array ( [0] => Array ( [Text] => ||netflix.com^$important ) ) [Reason] => 3 [IsFiltered] => 1 ) [IP] => 192.168.10.130 [Elapsed] => 8480623 ) )
@rr33rr, я идиот Ведь самое первое , что я попробовал это разобрать массив как json. Только я пробовал разобрать строки, а надо было просто превратить строки в массив. Спасибо.