2014-08-29 41 views
-2

我花了相当多的时间用这个,但无法生成解决方案,所以我要求你的帮助:) 我有一个这种结构的多维PHP数组:将PHP多维数组置换成HTML嵌套列表

Array 
(
    [1] => Array 
    (
     [title] => Dance Type 
     [id] => 2 
     [children] => Array 
     (
      [0] => Tango 
      [1] => Salsa 
      [2] => Hip-Hop 
     ) 
    ) 
    [2] => Array 
    (
     [title] => Age 
     [id] => 3 
     [children] => Array 
      (
       [0] => Young 
       [1] => Teen 
       [2] => Senior 
      ) 
    ) 
    [3] => Array 
    (
     [title] => Grade 
     [id] => 1 
     [children] => Array 
      (
       [0] => Professional 
       [1] => Student 
      ) 
    ) 
    [4] => Array 
    (
     [title] => Groups 
     [id] => 4 
     [children] => Array 
      (
       [0] => Small Group 
       [1] => Duet 
      ) 
    ) 
) 

该阵列可以包含密钥的无限量,不一定4.

我需要的是,以产生具有以下结构的嵌套 “调度”(UL/LI):

<ul> 
    <li>Tango 
    <ul> 
     <li>Young 
     <ul> 
      <li>Professional 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
      <li>Student 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
     <li>Teen 
     <ul> 
      <li>Professional 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
      <li>Student 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
     <li>Senior 
     <ul> 
      <li>Professional 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
      <li>Student 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
    </ul> 
    </li> 
    <li>Salsa 
    <ul> 
     <li>Young 
     <ul> 
      <li>Professional 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
      <li>Student 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
     <li>Teen 
     <ul> 
      <li>Professional 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
      <li>Student 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
     <li>Senior 
     <ul> 
      <li>Professional 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
      <li>Student 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
    </ul> 
    </li> 
    <li>Hip-Hop 
    <ul> 
     <li>Young 
     <ul> 
      <li>Professional 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
      <li>Student 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
     <li>Teen 
     <ul> 
      <li>Professional 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
      <li>Student 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
     <li>Senior 
     <ul> 
      <li>Professional 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
      <li>Student 
      <ul> 
       <li>Small Group</li> 
       <li>Duet</li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
    </ul> 
    </li> 
</ul> 

在此先感谢您的帮助!

编辑:从MySQL数据库直生成此数组(使用一个表): eventsRegistrationRoutinesCategories表:

| categoriesID [int(10)] | categoryTitle [text] | optionTitle [text] | 
------------------------------------------------------------------------ 
| 2      | Dance Type   | Tango    | 
------------------------------------------------------------------------ 
| 3      | Age     | Young    | 
------------------------------------------------------------------------ 
| 1      | Grade     | Professional   | 
------------------------------------------------------------------------ 
| 4      | Groups    | Small Group   | 
------------------------------------------------------------------------ 
| 2      | Dance Type   | Salsa    | 
------------------------------------------------------------------------ 
| 3      | Age     | Teen     | 
------------------------------------------------------------------------ 
| 1      | Grade     | Student    | 
------------------------------------------------------------------------ 
| 4      | Groups    | Duet     | 
------------------------------------------------------------------------ 
| 2      | Dance Type   | Salsa    | 
------------------------------------------------------------------------ 
| 3      | Age     | Senior    | 
------------------------------------------------------------------------ 
| 2      | Dance Type   | Hip-Hop    | 
------------------------------------------------------------------------ 
etc... 


$schedule = array(); 
$sSQL="SELECT DISTINCT(categoriesID), categoryTitle FROM eventsRegistrationRoutinesCategories WHERE eventsID = '".$eventsID."' ORDER BY eventsRegistrationRoutinesCategoriesID"; 
$result = mysqli_query($linkMySQL, $sSQL) or sqlError($sSQL,mysqli_error($linkMySQL)); 
$count1 = 1; 
while($row = mysqli_fetch_array($result)) { 
    $schedule[$count1]['title'] = $row['categoryTitle']; 
    $schedule[$count1]['id'] = $row['categoriesID']; 
    // Get all sub options for each 
    $sSQL2="SELECT * FROM eventsRegistrationRoutinesCategories WHERE categoriesID = '".$row["categoriesID"]."' GROUP BY categoriesOptionsID ORDER BY eventsRegistrationRoutinesCategoriesID"; 
    $result2=mysqli_query($linkMySQL, $sSQL2) or sqlError($sSQL2,mysqli_error($linkMySQL)); 
    while($row2 = mysqli_fetch_array($result2)) { 
     if(!empty($row2["optionTitle"])) { 
      $schedule[$count1]['children'][] = $row2["optionTitle"]; 
     } 
    } 
    $count1++; 
} 
+1

你能与我们分享您当前的非工作的代码,所以我们可以帮你吗? – Sugar 2014-08-29 05:47:47

+0

你的数组和DOM并不在一起,你需要修改其中的一个,粘贴生成这个数组的代码。 – anwerj 2014-08-29 05:50:35

+0

我已经添加了我的MySQL表结构以及生成该数组的函数。感谢你们。 – 2014-08-29 06:52:45

回答

0

我已经想通了这一点并会发布一个答案,以防有人需要它:) 我已经调用了我们的数组“$ scheduleNested”。然后我创建了一个功能:

function buildTree($array, $depth) { 
    global $scheduleNested; 
    echo '<ul>'; 
    foreach($array as $row) { 
     echo '<li>'; 
     echo $row; 
     if(isset($scheduleNested[$depth+1])) { 
      buildTree($scheduleNested[$depth+1]['children'], $depth+1); 
     } 
     echo '</li>'; 
    } 
    echo '</ul>'; 
} 

然后我们调用这个函数我们的DIV中:

<div class="dd" id="nestable2"> 
    <? 
    buildTree($scheduleNested[1]['children'],1); 
    ?> 
</div> 
0

使用此..希望这有助于

$array=//Your input array 

foreach($array as $row) { 
    $result[$row['title']]=$row['children']; 
} 


echo '<ul>'; 
foreach($result['Dance Type'] as $dance_type) { 
    echo '<li>'.$dance_type.'</li>'; 
    echo '<ul>'; 
    foreach($result['Age'] as $age) { 
     echo '<li>'.$age.'</li>'; 
     echo '<ul>'; 
     foreach($result['Grade'] as $grade) { 
      echo '<li>'.$grade.'</li>'; 
      echo '<ul>'; 
      foreach($result['Groups'] as $groups) { 
       echo '<li>'.$groups.'</li>'; 
      } 
      echo '</ul>'; 
     } 
     echo '</ul>'; 
    } 
    echo '</ul>'; 
} 
echo '</ul>'; 
+0

非常感谢您的帮助,但只有在您知道嵌套表格“非常深”(不一定是4个键)并且您知道类别名称时才有用。请注意,我们可以有第5个关键字 - 包含“男性”和“女性”的儿童的“性别”,我们可以有第6个关键字 - 带有“红色”和“蓝色”儿童的“颜色”,两者都会扩展嵌套树。主键的潜在数量是无限的。 – 2014-08-29 06:58:19