Функция PHP генерирует UL LI - PullRequest
1 голос
/ 16 марта 2010

Я передаю этот адрес для функции olLiTree

Функция PHP, которая создает вложенный ul li?

У меня есть этот массив

$ tree = Массив ( "А" => массив ( "B" => массив ( "С" => "С", "D" => "D"), "Е" => массив ( "F" => "Р" , "G" => "G")));

но не может использовать эту функцию

function olLiTree($tree)
{
    echo '<ul>';
    foreach($tree as $item) {
        if (is_array($item)) {
            olLiTree($item);
        } else {
            echo '<li>', $item, '</li>';
        }
    }
    echo '</ul>';
}

для генерации

<ul>
  <li>A</li>
  <li>B
    <ul>
      <li>C</li>
      <li>D</li>
    </ul>
  </li>
  <li>E
    <ul>
      <li>F
      </li>
    </ul>
  </li>
  <ul>
    <li>G</li>
  </ul>
</ul>

Кто-нибудь может мне помочь исправить это? спасибо ..

Ответы [ 2 ]

8 голосов
/ 16 марта 2010
function olLiTree($tree) {
    $out = '<ul>';

    foreach($tree as $key => $value) {
        $out.= '<li>';

        if (is_array($value)) {
            $out.= $key . olLiTree($value);
        } else {
            $out.= $value;
        }

        $out.= '</li>';
    }

    $out.= '</ul>';

    return $out;
}

Всегда return конечный результат, не echo напрямую. Вы будете благодарить себя однажды, когда обнаружите ситуацию, когда вы не захотите echo немедленно. :)

Возможно, вы захотите изменить структуру массива на такую, поскольку она менее избыточна (работает с приведенным выше кодом):

$tree = array('A', 'B', 'C' => array('CA', 'CB'), 'D');
1 голос
/ 16 марта 2010

При использовании чего-то подобного это должно работать (я не проверял это, так что, надеюсь, я не допустил никаких смущающих ошибок):

function olLiTree($tree)
{
    echo '<ul>';
    foreach($tree as $key => $item) {
        if (is_array($item)) {
            echo '<li>', $key;
            olLiTree($item);
            echo '</li>';
        } else {
            echo '<li>', $item, '</li>'; // Or use $key here as well
        }
    }
    echo '</ul>';
}

Если вы хотите точно соответствовать приведенному примеру, вам нужно изменить массив, так как он не соответствует результату. (Но я полагаю, что это не проблема)

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