Php 从多维数组生成HTML

Php 从多维数组生成HTML,php,html,arrays,multidimensional-array,Php,Html,Arrays,Multidimensional Array,我想用php生成如下HTML代码: <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">C

我想用php生成如下HTML代码:

<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>
附属表格和赛璐珞
    赛璐珞辅料
    • 支持et站数据采集
    • 汽车制造商
        赛璐珞酒 智能手机充电器
      保护膜 赛璐珞舞曲和改编曲 Autres附件 iPhone上的小扁豆 赛璐珞舞曲 附件蓝牙和主接线盒
    附件-iPod和Lecter MP3
      Émetteurs FM
    • 保护者和运输部门
    • 附件
    • MP3
    桌子的附件
      Stylos和clavier
    • C–bles et adaptateurs
    • 汽车制造商
    • 保护者和运输部门
    • 支持et站数据采集
从我在示例中显示的数组中。 该数组如下所示:

HTML id必须是数组中的类别id,
  • 文本必须是数组中的名称

    我需要使用从数组到的所有子元素

    现在我有这样的东西:

        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>
    
    函数生成树($item,$key)
    {
    如果($key==“类别id”){
    echo“
  • ”; } 如果($key==“name”){ 回显“$item
  • \n”; } } 数组_walk_recursive($cat,'generate_tree');
    但此示例代码将所有项放在同一级别,如下所示:

        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>
    
    产品
  • 附属表格和赛璐珞 赛璐珞辅料
  • 支持et站数据采集
  • 汽车制造商 赛璐珞酒 智能手机充电器 保护膜 赛璐珞舞曲和改编曲 Autres附件 iPhone上的小扁豆 赛璐珞舞曲 附件蓝牙和主接线盒 附件-iPod和Lecter MP3 Émetteurs FM
  • 保护者和运输部门
  • 附件
  • MP3
  • 桌子的附件 Stylos和clavier
  • C–bles et adaptateurs
  • 汽车制造商
  • 保护者和运输部门
  • 支持et站数据采集
  • 报警和安全提示 多莫蒂克 温度船长 船闸及附属设施 电气和照明设备控制

    如何使用
      生成多个级别?

      对于您的情况,递归函数似乎是最好的。以下可能会起到以下作用:

      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,$data)
      {
      如果($10级以下)
      {
      foreach($key=>$value形式的数据)
      {
      //回声
    • 如果(!empty($value['children'])) { //回声
        这里 递归($level+1.$value) //回声
      这里 } //回声
    • 在这里 } } }
      这可以防止编写重复的代码,这是一种相当常见的做法。我还添加了一个变量$level和一个检查,以防止太深,我总是添加它来减少无限递归的可能性


      希望对您有所帮助。

      下面是一个适合您的数据的递归示例:

      <?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验证:
      ()

      函数doit($a1,$indent){
      如果(计数($a1)==0)返回;
      echo“\n$indent
        \n”; foreach($a1为$a2){ $v1=$a2['one']; $v2=$a2['two']; 回显“$indent
      • $v2”; doit($a2['three',“$indent”); 回音“
      • \n”} 回声“$indent
      ”; }
      好的,但您的问题是什么?如何从我在文章中介绍的数组示例中在php中生成这样的HTML代码。您需要一些逻辑来说明什么地方去了……即。什么是顶级页面,您如何识别它?我认为这种方式是更好的方法!非常好的方法,谢谢!如果这解决了你的问题,你介意把它作为答案吗?谢谢。谢谢你的帮助!