$array = [] ; $array["aaa"] = ["url"=>"aaa", "name"=>"AAA"]; $array["bbb"] = ["url"=>"bbb", "name"=>"BBB"]; $array["ccc"] = ["url"=>"ccc", "name"=>"CCC"]; $array["ccc"]["ddd"] = ["url"=>"ddd", "name"=>"DDD"]; $array["ccc"]["ddd"]["eee"] = ["url"=>"eee", "name"=>"EEE"]; $array["fff"] = ["url"=>"fff", "name"=>"FFF"]; $array["ggg"] = ["url"=>"ggg", "name"=>"GGG"];
<ul> <li><a href="aaa">AAA</a></li> <li><a href="bbb">BBB</a></li> <li><a href="ccc">CCC</a> <ul> <li><a href="ccc/ddd">DDD</a> <ul> <li><a href="ccc/ddd/eee">EEE</a></li> </ul> </li> </ul> </li> <li><a href="fff">FFF</a></li> <li><a href="ggg">GGG</a></li> </ul>
private function makeList($array) { if(is_array($array)) { $pridej_ul = false; $output = ''; $url = ''; foreach($array as $key => $subArray) { if(isset($subArray ["url"])) { $pridej_ul = true; $output .= '<li>'; $output .= '<a href="'.$subArray["url"].'">'.$subArray["name"].'</a>'; $output .= $this -> makeList ( $subArray ); $output .= '</li>'; } else { $output .= $this -> makeList($subArray); } } if ($pridej_ul) { $output = '<ul>'.$output.'</ul>'; } } else { $output = ''; } return $output; }
function render(array $array) { $expected = ['url', 'name']; echo '<ul>'; foreach ($array as $item) { echo sprintf('<li><a href="%s">%s</a></li>', $item['url'], $item['name']); if (count($item) > 2) { $nested = array_filter( $item, function ($key) use ($expected) { return !in_array($key, $expected) ? $key : false; }, ARRAY_FILTER_USE_KEY ); render($nested); } } echo '</ul>'; } render($array);
$render = function($element, $key, $path) { if (isset($element['name'] && isset['url'])) { sprintf("<li><a href='%s'>%s</a> ", explode("/", $path), $element['name']); } else { sprintf("<ul>"); array_walk($element, __function__, array_merge($path, array($key)); sprintf("</ul>"); }};array_walk($array, $render, array());
$array["ccc"] = ["url"=>"ccc", "name"=>"CCC"];$array["ccc"]["ddd"] = ["url"=>"ddd", "name"=>"DDD"];$array["ccc"]["ddd"]["eee"] = ["url"=>"eee", "name"=>"EEE"];
function render($element, $key, $path) { $path = array_merge($path, array($key)); echo "<li>"; if (isset($element['name']) && isset($element['url'])) { echo sprintf("<a href='%s'>%s</a>", implode("/", $path), $element['name']); unset($element['name']); unset($element['url']); } if ($element) { echo "<ul>"; array_walk($element, 'render', $path); echo "</ul>"; } echo "</li>";};echo "<ul>";array_walk($array, 'render', array());echo "</ul>";
function render_element($element, $key, $path) { echo "<li>"; $path = array_merge($path, array($key)); if (isset($element['name']) && isset($element['url'])) { echo sprintf("<a href='%s'>%s</a>", implode("/", $path), $element['name']); unset($element['name']); unset($element['url']); } render($element, $path); echo "</li>";};function render($array, $path=array()) { if ($array) { echo "<ul>"; array_walk($array, 'render_element', $path); echo "</ul>"; }}render($array);
Díky, ale taky ti to nevypisuje správně ty url...
$array = [] ;$array[] = ["url"=>"aaa", "name"=>"AAA"];$array[] = ["url"=>"bbb", "name"=>"BBB"];$array[] = ["url"=>"ccc", "name"=>"CCC"];$array[][] = ["url"=>"ddd", "name"=>"DDD"];$array[][][] = ["url"=>"eee", "name"=>"EEE"];$array[] = ["url"=>"fff", "name"=>"FFF"];$array[] = ["url"=>"ggg", "name"=>"GGG"];
Nemusí
array( array('aaa', null), array('bbb', null) array('ccc', array('ddd', array('eee', null))), array('fff', null), array('ggg', null),);
$suburl = reset($element);$name = strtoupper(reset($element));if (end($element)) array_walk(end($element), 'render_element', $path);
$array = [] ;$array[] = ["url"=>"aaa", "name"=>"AAA"];$array[] = ["url"=>"bbb", "name"=>"BBB"];$array[] = ["url"=>"ccc", "name"=>"CCC"];$array[][] = ["url"=>"ddd", "name"=>"DDD"];$array[][][] = ["url"=>"eee", "name"=>"EEE"];$array[] = ["url"=>"fff", "name"=>"FFF"];$array[] = ["url"=>"ggg", "name"=>"GGG"];function render_element($element, $key, $path) { echo "<li>"; $path = array_merge($path, array($key)); if (isset($element['name']) && isset($element['url'])) { echo sprintf("<a href='%s'>%s</a>", implode("/", $path), $element['name']); unset($element['name']); unset($element['url']); } render($element, $path); echo "</li>";}function render($array, $path=array()) { if ($array) { echo "<ul>"; //array_walk($array, 'render_element', $path); $suburl = reset($element); $name = strtoupper(reset($element)); if (end($element)) array_walk(end($element), 'render_element', $path); echo "</ul>"; }}render($array);
@Ivan NovýMoc děkuji, tak jsem to zkusil opravit ale nevypíše se vůbec nic Takto to teď celé mámKód: [Vybrat]$array = [] ;$array[] = ["url"=>"aaa", "name"=>"AAA"];$array[] = ["url"=>"bbb", "name"=>"BBB"];$array[] = ["url"=>"ccc", "name"=>"CCC"];$array[][] = ["url"=>"ddd", "name"=>"DDD"];$array[][][] = ["url"=>"eee", "name"=>"EEE"];$array[] = ["url"=>"fff", "name"=>"FFF"];$array[] = ["url"=>"ggg", "name"=>"GGG"];function render_element($element, $key, $path) { echo "<li>"; $path = array_merge($path, array($key)); if (isset($element['name']) && isset($element['url'])) { echo sprintf("<a href='%s'>%s</a>", implode("/", $path), $element['name']); unset($element['name']); unset($element['url']); } render($element, $path); echo "</li>";}function render($array, $path=array()) { if ($array) { echo "<ul>"; //array_walk($array, 'render_element', $path); $suburl = reset($element); $name = strtoupper(reset($element)); if (end($element)) array_walk(end($element), 'render_element', $path); echo "</ul>"; }}render($array);