Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Doplnění PHP kódu

Ahoj, na internetu jsem našel takový PHP kód, sice funguje parádně ale potřeboval bych ho trochu poopravit :(

PHP pole

$menu = array(
  array('id'=>1,'title'=>'Menu 1',          'parent_id'=>null),
  array('id'=>2,'title'=>'Sub 1.1',         'parent_id'=>1),
  array('id'=>3,'title'=>'Sub 1.2',         'parent_id'=>1),
  array('id'=>4,'title'=>'Sub 1.3',         'parent_id'=>1),
  array('id'=>5,'title'=>'Menu 2',          'parent_id'=>null),
  array('id'=>6,'title'=>'Sub 2.1',         'parent_id'=>5),
  array('id'=>7,'title'=>'Sub Sub 2.1.1',   'parent_id'=>6),
  array('id'=>8,'title'=>'Sub 2.2',         'parent_id'=>5),
  array('id'=>9,'title'=>'Menu 3',          'parent_id'=>null),
);

PHP kód

function has_children($rows,$id) {
  foreach ($rows as $row) {
    if ($row['parent_id'] == $id)
      return true;
  }
  return false;
}
function build_menu($rows,$parent=0)
{  
  $result = "<ul>";
  foreach ($rows as $row)
  {
    if ($row['parent_id'] == $parent){
      $result.= "<li>{$row['title']}";
      if (has_children($rows,$row['id']))
        $result.= build_menu($rows,$row['id']);
      $result.= "</li>";
    }
  }
  $result.= "</ul>";

  return $result;
}
echo build_menu($menu);

Html výstup

<ul>
  <li>Menu 1<ul>
    <li>Sub 1.1</li>
    <li>Sub 1.2</li>
    <li>Sub 1.3</li>
  </ul></li>
  <li>Menu 2<ul>
    <li>Sub 2.1<ul>
      <li>Sub Sub 2.1.1</li>
    </ul></li>
    <li>Sub 2.2</li>
  </ul></li>
  <li>Menu 3</li>
</ul>

Pro lepší orientaci jen výstup


Menu 1
   Sub 1.1
   Sub 1.2
   Sub 1.3
Menu 2
   Sub 2.1
      Sub Sub 2.1.1
   Sub 2.2
Menu 3

Potřeboval bych poopravit tento kód, aby byl výstup takový (pole musí být zachováno přesně tak jak je)

Požadovaný výstup


Menu 1
   Menu 1/Sub 1.1
   Menu 1/Sub 1.2
   Menu 1/Sub 1.3
Menu 2
   Menu 2/Sub 2.1
      Menu 2/Sub 2.1/Sub Sub 2.1.1
   Menu 2/Sub 2.2
Menu 3

Může nějaký profesionál co tomu rozumí poradit? Já to zkoušel ale nejsem programátor a tohle je vážně nad moje síly :( Děkuji za případnou pomoc.

Předmět Autor Datum
V PHP sice nedělám, ale zkusil bych něco takového: function build_menu($rows,$parent=0,$prefix='')…
Wikan 12.04.2018 18:35
Wikan
Ahoj, díky za tip, ale to vypisuje úplně to stejný :(
Učeň12 12.04.2018 18:40
Učeň12
Musíš tam, kde se volá build_menu dosadit za parametr prefix "/"
Flash_Gordon 12.04.2018 20:45
Flash_Gordon
Takto? $result.= build_menu($rows,$row['id'], $prefix.'/'.$row['title'].' ');
Učeň12 12.04.2018 20:53
Učeň12
Asi jo. Jen ty máš možnost to vyzkoušet a vidět výsledek. poslední
Flash_Gordon 12.04.2018 21:34
Flash_Gordon

V PHP sice nedělám, ale zkusil bych něco takového:

function build_menu($rows,$parent=0,$prefix='')
{  
  $result = "<ul>";
  foreach ($rows as $row)
  {
    if ($row['parent_id'] == $parent){
      $result.= "<li>{$prefix} {$row['title']}";
      if (has_children($rows,$row['id']))
        $result.= build_menu($rows,$row['id'], $prefix.$row['title'].' ');
      $result.= "</li>";
    }
  }
  $result.= "</ul>";

  return $result;
}

Zpět do poradny Odpovědět na původní otázku Nahoru