2015-01-31 199 views
1

HTML我想生成HTML這樣的代碼用PHP:生成從多維陣列

<li id="821">Accessoires tablette et cellulaire 
    <ul> 
    <li id="426">Accessoires pour cellulaire 
     <ul> 
     <li id="675">Supports et stations d'accueil</li> 
     <li id="680">Chargeurs maison et automobile 
      <ul> 
      <li id="689">Chargeurs pour cellulaire</li> 
      <li id="690">Chargeurs pour téléphone intelligent</li> 
      </ul> 
     </li> 
     <li id="681" >Pellicules protectrices</li> 
     <li id="682" >Câbles et adaptateurs pour cellulaire</li> 
     <li id="683" >Autres accessoires</li> 
     <li id="684" >Lentilles pour iPhone</li> 
     <li id="687" >Étuis pour cellulaire</li> 
     <li id="688" >Accessoires Bluetooth et mains libres</li> 
     </ul> 
    <li id="132">Accessoires - iPod et lecteur MP3 
     <ul> 
     <li id="238" >Émetteurs FM</li> 
     <li id="254" >Étuis protecteurs et sacs de transport</li> 
     <li id="272" >Accessoires</li> 
     <li id="356" >Lecteurs MP3</li> 
     </ul> 
    </li> 
    <li id="347">Accessoires pour tablette 
     <ul> 
     <li id="481" >Stylos et clavier</li> 
     <li id="482" >Câbles et adaptateurs</li> 
     <li id="486" >Chargeurs maison et automobile</li> 
     <li id="489" >Étuis protecteurs et sacs de transport</li> 
     <li id="485" >Supports et stations d'accueil</li> 
     </ul> 
    </li> 
    </ul> 
</li> 

從我顯示例如在陣列。 數組是這樣的:Array example

<li> HTML ID必須從數組中CATEGORY_ID和<li>文本需要從數組名稱。

我需要使用陣列中的所有孩子。 對不起,如果我不清楚我不會說英語!

現在我有這樣的事情:

function generate_tree($item, $key) 
{ 
    if ($key == "category_id"){ 
     echo "<li id=\"$item\">"; 
    } 

    if ($key == "name"){ 
     echo "$item</li>\n"; 
    } 
} 

array_walk_recursive($cat, 'generate_tree'); 

但此示例代碼把所有項目都在同一水平是這樣的:

<li id="18">Produits</li> 
<li id="821">Accessoires tablette et cellulaire</li> 
<li id="426">Accessoires pour cellulaire</li> 
<li id="675">Supports et stations d'accueil</li> 
<li id="680">Chargeurs maison et automobile</li> 
<li id="689">Chargeurs pour cellulaire</li> 
<li id="690">Chargeurs pour téléphone intelligent</li> 
<li id="681">Pellicules protectrices</li> 
<li id="682">Câbles et adaptateurs pour cellulaire</li> 
<li id="683">Autres accessoires</li> 
<li id="684">Lentilles pour iPhone</li> 
<li id="687">Étuis pour cellulaire</li> 
<li id="688">Accessoires Bluetooth et mains libres</li> 
<li id="132">Accessoires - iPod et lecteur MP3</li> 
<li id="238">Émetteurs FM</li> 
<li id="254">Étuis protecteurs et sacs de transport</li> 
<li id="272">Accessoires</li> 
<li id="356">Lecteurs MP3</li> 
<li id="347">Accessoires pour tablette</li> 
<li id="481">Stylos et clavier</li> 
<li id="482">Câbles et adaptateurs</li> 
<li id="486">Chargeurs maison et automobile</li> 
<li id="489">Étuis protecteurs et sacs de transport</li> 
<li id="485">Supports et stations d'accueil</li> 
<li id="136">Alarmes et sécurité</li> 
<li id="825">Domotique</li> 
<li id="828">Capteur de température</li> 
<li id="618">Carillon de porte et accessoires</li> 
<li id="826">Contrôle d'électroménager et de luminaire</li> 

怎樣才能與<ul>

+2

好了,但究竟是你的問題? – 2015-01-31 22:47:23

+0

如何在PHP中從我放在帖子中的數組示例中生成這樣的HTML代碼。 – 2015-01-31 22:51:02

+1

這裏你需要一些邏輯來處理哪些事情......也就是說。什麼是頂級頁面,你如何識別它? – David 2015-02-01 00:33:28

回答

2
多級

對於你的情況,似乎遞歸函數是最好的。以下可能會做:

function recursion($level, $data) 
{ 
    if($level < 10) 
    { 
     foreach($data as $key => $value) 
     { 
     //echo <li> 

     if(!empty($value['children'])) 
     { 
     //echo <ul> here 
     recursion($level+1. $value) 
     //echo </ul> here 
     } 
     //echo </li> here 
     } 


    } 
} 

這可以防止編寫重複的代碼,這是一個相當普遍的做法。我還添加了一個變量$ level和一個檢查來防止變得太深,我總是添加這個變量來減少無限遞歸的概率。

希望有所幫助。

+0

我認爲這樣做是更好的方法! 很好的做法,謝謝你! – 2015-02-01 02:10:44

+0

如果這解決了您的問題,您是否將此標記爲答案的答案?謝謝。 – Xeschylus 2015-02-01 13:48:59

1

這裏是一個遞歸的例子適應您的數據:

<?php 
$var1 = array(
'0' => array(
    'one' => '426', 'two' => 'alpha', 'three' => array(
    '0' => array(
     'one' => '675', 'two' => 'beta', 'three' => array()), 
    '1' => array(
     'one' => '680', 'two' => 'gamma', 'three' => array(
     '0' => array(
      'one' => '689', 'two' => 'delta', 'three' => array()), 
     '1' => array(
      'one' => '690', 'two' => 'epsilon', 'three' => array()),)), 
    '2' => array(
     'one' => '681', 'two' => 'zeta', 'three' => array()), 
    '3' => array(
     'one' => '682', 'two' => 'eta', 'three' => array())))); 

    doit($var1, ''); 

function doit($a1, $indent) { 
    if (count($a1) == 0) return; 
    echo "$indent<ul>\n"; 
    foreach ($a1 as $a2) { 
    $v1 = $a2['one']; 
    $v2 = $a2['two']; 
    echo " $indent<li id=\"$v1\">$v2</li>\n"; 
    doit($a2['three'], " $indent"); } 
    echo "$indent</ul>\n"; 
    } 
?> 

編輯:使之通過HTML驗證:
Proper way to make HTML nested list?

function doit($a1, $indent) { 
    if (count($a1) == 0) return; 
    echo "\n$indent<ul>\n"; 
    foreach ($a1 as $a2) { 
    $v1 = $a2['one']; 
    $v2 = $a2['two']; 
    echo "$indent<li id=\"$v1\">$v2"; 
    doit($a2['three'], " $indent"); 
    echo "</li>\n"; } 
    echo "$indent</ul>"; 
    } 
+0

謝謝你的幫助! – 2015-02-01 02:11:49