Преобразовать строку в объект PHP - PullRequest
0 голосов
/ 27 января 2020

Я новичок в PHP. Я знаю, что есть много ответов на это. Но я не могу найти подходящее решение для моего случая. У меня есть строка, которая выглядит следующим образом:

lo:
00:00:00:00:00:00
enp0s25:
00:21:cc:d4:2a:23
wlp3s0:
84:3a:4b:03:3c:3a
wwp0s20u4:
7a:e3:2a:de:66:09
br-a02a0801833f:
02:42:75:b4:8b:58
docker0:
02:42:cb:f0:5f:0d

Я хочу преобразовать ее в JSON объект, который должен быть таким.

{
 "lo":"00:00:00:00:00:00",
 "enp0s25":"00:21:cc:d4:2a:23",
 "wlp3s0":"84:3a:4b:03:3c:3a",
 "wwp0s20u4":"7a:e3:2a:de:66:09",
 "br-a02a0801833f":"02:42:75:b4:8b:58"
 "docker0":"02:42:cb:f0:5f:0d"
}

Помогите мне с некоторыми решениями , Вот код:

<?php
        $mac = shell_exec("ip link | awk '{print $2}'");
        echo($mac);
        print_r("type:  ");
        print_r(gettype($mac));
        $check = json_decode($mac);
        print_r($check);     
?>

1 Ответ

2 голосов
/ 27 января 2020

Вы можете использовать preg_match_all, чтобы найти все ключи и значения во входной строке, захватывать ключи в группу 1 и значения в группу 2. Затем вы можете использовать array_combine сложить ключи и значения в ассоциативный массив и json_encode, что:

preg_match_all('/([a-z0-9@-]+):\s+((?:[0-9a-f]{2}:){5}[0-9a-f]{2})/i', $str, $matches);
$output = array_combine($matches[1], $matches[2]);
echo json_encode($output, JSON_PRETTY_PRINT);

Выход:

{
    "lo": "00:00:00:00:00:00",
    "enp0s25": "00:21:cc:d4:2a:23",
    "wlp3s0": "84:3a:4b:03:3c:3a",
    "wwp0s20u4": "7a:e3:2a:de:66:09",
    "br-a02a0801833f": "02:42:75:b4:8b:58",
    "docker0": "02:42:cb:f0:5f:0d"
}

Демонстрация включена 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...