Как с помощью PHP трансформировать Json данные в маркированный список HTML с помощью тегов
    и
  • ?

Имеется следующая Json структура.

{
  "menu": [
    {
      "level": "2"
    },
    {
      "level": "2"
    },
    {
      "level": "2"
    },
    {
      "level": "3"
    },
    {
      "level": "3"
    },
    {
      "level": "3"
    },
    {
      "level": "4"
    },
    {
      "level": "4"
    },
    {
      "level": "4"
    },
    {
      "level": "2"
    },
    {
      "level": "3"
    },
    {
      "level": "3"
    },
    {
      "level": "3"
    },
    {
      "level": "4"
    },
    {
      "level": "2"
    },
    {
      "level": "3"
    },
    {
      "level": "3"
    }
  ]
}

Как с помощью PHP трансформировать его в маркированный список HTML с помощью тегов <ul> и <li>

уточнение:

все подряд "level": "3" после "level": "2" именно его подсписок ------ все подряд "level": "4" после "level": "3" именно его подсписок и так далее

Именно этот Json будет выглядеть так

  • 2
  • 2
  • 2
    • 3
    • 3
    • 3
      • 4
      • 4
      • 4
  • 2
    • 3
    • 3
    • 3
      • 4
  • 2
    • 3
    • 3

Ответы (2 шт):

Автор решения: Denis640Kb
$Json = '{
    "menu": [
    {
        "level": "2"
    },
    {
        "level": "2"
    },
    {
        "level": "2"
    },
    {
        "level": "3"
    },
    {
        "level": "3"
    },
    {
        "level": "3"
    },
    {
        "level": "4"
    },
    {
        "level": "4"
    },
    {
        "level": "4"
    },
    {
        "level": "2"
    },
    {
        "level": "3"
    },
    {
        "level": "3"
    },
    {
        "level": "3"
    },
    {
        "level": "4"
    },
    {
        "level": "2"
    },
    {
        "level": "3"
    },
    {
        "level": "3"
    }
  ]
}';

$Arr1 = json_decode($Json);

echo '<ul>';
foreach ($Arr1->menu as $item){
    echo '<li>'.$item->level.'</li>';
}
echo '</ul>';
→ Ссылка
Автор решения: Denis640Kb
<?php
$Json = '{
    "menu": [
    {
        "level": "2"
    },
    {
        "level": "2"
    },
    {
        "level": "2"
    },
    {
        "level": "3"
    },
    {
        "level": "3"
    },
    {
        "level": "3"
    },
    {
        "level": "4"
    },
    {
        "level": "4"
    },
    {
        "level": "4"
    },
    {
        "level": "2"
    },
    {
        "level": "3"
    },
    {
        "level": "3"
    },
    {
        "level": "3"
    },
    {
        "level": "4"
    },
    {
        "level": "2"
    },
    {
        "level": "3"
    },
    {
        "level": "3"
    }
  ]
}';

$Arr1 = json_decode($Json);
$TempArr = [];
$val = 100;
foreach ($Arr1->menu as $item){
    if($item->level < $val){
        $val = $item->level;
    }
    $TempArr[] = $item->level;
}
echo '<ul>';
for ($i=0;$i<count($TempArr);$i++){
    if (isset($TempArr[$i+1])){
        //print_r($TempArr[$i]);
        if($TempArr[$i] == $TempArr[$i+1]){
            echo '<li>' . $TempArr[$i] . '</li>';
        } elseif ($TempArr[$i] > $TempArr[$i+1]){
            $val = $TempArr[$i]-$TempArr[$i+1];
            echo '<li>'.$TempArr[$i].'</li>';
            for ($i1=0;$i1<$val;$i1++) {
                echo '</ul>';
            }
        } elseif ($TempArr[$i] < $TempArr[$i+1]){
            echo '<li>'.$TempArr[$i].'</li><ul>';
        }
    } else {
        echo '<li>'.$TempArr[$i].'</li>';
    }
}
echo '</ul>';

Результат:

введите сюда описание изображения

→ Ссылка