Я просто играю с кодированием пару месяцев и не знаю, как решить эту проблему, хорошо, вот проблема

Я получил этот тип JSON

{
"PC": {
    "Acer": {
        "Series 1" : "Series 1",
        "Series 2" : "Series 2",
        "Series 3" : "Series 3",
    },
    "Lenovo": {
        "Series 1" : "Series 1",
        "Series 2" : "Series 2",
        "Series 3" : "Series 3",
    }
},
"Apple": {
    "Macbook": {
        "Series 1" : "Series 1",
        "Series 2" : "Series 2",
        "Series 3" : "Series 3",
    }
    "Iphone": {
        "Series 1" : "Series 1",
        "Series 2" : "Series 2",
        "Series 3" : "Series 3",
    }
},
}

Мой вопрос, как превратить этот многомерный JSON в нечто подобное

PC, Acer, Series 1
PC, Acer, Series 2
PC, Acer, Series 3
PC, Lenovo, Series 1
PC, Lenovo, Series 2
PC, Lenovo, Series 3
Apple, Macbook, Series 1
Apple, Macbook, Series 2
Apple, Macbook, Series 3
Apple, Iphone, Series 1
Apple, Iphone, Series 2
Apple, Iphone, Series 3

Должен ли я использовать multi foreach? или есть другой способ, который не потребляет много памяти?

Спасибо..

0
Mulan999 21 Дек 2019 в 07:16

1 ответ

Да, вы можете попытаться найти какое-то решение для преобразования JSON в регулярные выражения. Также вы можете играть с опциями, когда структура отличается или не определена вообще. Тогда вам нужно умное решение с рекурсией.

Это простое решение, когда вы знаете свою структуру и используете PHP JSON-декодер и циклы foreach.

Прежде всего, вы должны исправить свой JSON, он имеет ошибки и не будет обрабатываться PHP-декодером:

$json = "{
\"PC\": {
    \"Acer\": {
        \"Series 1\" : \"Series 1\",
        \"Series 2\" : \"Series 2\",
        \"Series 3\" : \"Series 3\"
    },
    \"Lenovo\": {
        \"Series 1\" : \"Series 1\",
        \"Series 2\" : \"Series 2\",
        \"Series 3\" : \"Series 3\"
    }
},
\"Apple\": {
    \"Macbook\": {
        \"Series 1\" : \"Series 1\",
        \"Series 2\" : \"Series 2\",
        \"Series 3\" : \"Series 3\"
    },
    \"Iphone\": {
        \"Series 1\" : \"Series 1\",
        \"Series 2\" : \"Series 2\",
        \"Series 3\" : \"Series 3\"
    }
}
}";

Теперь вы можете запустить решение с форматом и ожидаемым результатом:

$data = json_decode($json, true);

foreach($data as $system => $brand) {
    foreach($brand as $name => $series) {
        foreach($series as $val) {
            echo "$system, $name, $val\n";
        }
    }
}
0
Anatoliy R 21 Дек 2019 в 09:23