PHP işlevi UL LI oluşturmak

2 Cevap php

Ben işlevi için bu adresi bahsediyorum olLiTree

http://stackoverflow.com/questions/753853/php-function-that-creates-a-nested-ul-li

i bu dizi var

$tree = array("A"=>array("B"=>array("C"=>"C","D"=>"D"),"E"=>array("F"=>"F","G"=>"G")));

ama mümkün değil, bu işlevi kullanmak için

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

üretmek için

<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>

can anybody help me to fix this? thanks..

2 Cevap

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;
}

Her zaman return nihai çıkış, değil echo bunu doğrudan. Eğer don't için echo bunu derhal istediğiniz bir durum bulmak zaman bir gün kendinize teşekkür edeceksiniz. :)

(Yukarıdaki kod ile çalışır) daha az yedekli olarak size, bu dizi yapısını değiştirmek isteyebilirsiniz:

$tree = array('A', 'B', 'C' => array('CA', 'CB'), 'D');

Böyle bir şey ile çalışmak (ben bunu test etmedi, bu yüzden umarım ben hiçbir utanç verici hata vermedi) olmalıdır:

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>';
}

Eğer tam olarak verilen örnek eşleştirmek istiyorsanız bu sonucu eşleşmiyor beri, dizi değiştirmeniz gerekir. (Ama bu sorun değil herhalde)