2016-10-15 3 views
2

카테고리 및 하위 카테고리를 만드는 데있어 능률적 인 프로젝트를 진행하고 있습니다. 내가 내 데이터베이스에서 변경 한 것은 subcategory columncategory_key columnPHP foreach 카테고리 및 하위 카테고리

의미에 관계를 가지고 있다는 것입니다, subcategory column에 값이없는 모든 레코드를 범주로 간주됩니다, 나머지는 하위 범주입니다. 아래 그림에서

:

  • ba
  • e, g, h의 하위 범주가 d

enter image description here

의 하위 범주입니다 그리고 지금은으로 모니터하기 위해이 코드를 사용하고있다 내 페이지에서 :

<?php 
    $query = "SELECT * FROM `categories`"; 
    $result = mysql_query($query); 
    while($row = mysql_fetch_array($result)){ 
     if(empty($row['subcategory'])){ 
      echo ' 
       <li class="dd-item dd3-item" id="'.$row['category_key'].'" data-name="'.$row['category_name'].'" data-key="'.$row['category_key'].'"> 
        <div class="dd-handle dd3-handle"> 
         <i class="fa fa-bars" aria-hidden="true"></i> 
        </div> 
        <div class="dd-edit other-handle edit"> 
         <i class="fa fa-pencil" aria-hidden="true"></i> 
        </div> 
        <div class="dd-edit other-handle delete"> 
         <i class="fa fa-trash" aria-hidden="true"></i> 
        </div> 
        <div class="dd3-content">'.$row['category_name'].'</div> 
       </li> 
      '; 
     }else{ 
      echo ' 
       <ol class="dd-list"> 
        <li class="dd-item dd3-item" id="'.$row['category_key'].'" data-name="'.$row['category_name'].'" data-key="'.$row['category_key'].'"> 
         <div class="dd-handle dd3-handle"> 
          <i class="fa fa-bars" aria-hidden="true"></i> 
         </div> 
         <div class="dd-edit other-handle edit"> 
          <i class="fa fa-pencil" aria-hidden="true"></i> 
         </div> 
         <div class="dd-edit other-handle delete"> 
          <i class="fa fa-trash" aria-hidden="true"></i> 
         </div> 
         <div class="dd3-content">'.$row['category_name'].'</div> 
        </li> 
       </ol> 
      '; 
     } 
    } 
?> 

enter image description here

문제는 하나이어야하며, 또한 그것의 <li> 카테고리의 상위 안에 있어야로 <ol> 요소가 반복된다.

enter image description here

어떤 도움 ?

function appendChildren($input) 
    { 
     $output = []; 
     foreach($input as $value) 
     { 
     $key = $value["category_key"]; 
     if(empty($input["subcategory"])) 
     { 
      $output[$key] = []; 
      $output[$key]["value"] = $value; 
      $output[$key]["children"] = []; 
     } else { 
      $parent_key = $value["subcategory"]; 
      $output[$parent_key]["children"][] = $value; 
     } 
     } 

     return $output; 
    } 

는 다음과 같은 배열을해야합니다 :

+1

사용 : 이제

|-- b |-- a | |-- c |-- d |-- e |-- g |-- h | |-- f 

, 서식을 시작합니다 카테고리와 하위 카테고리 모두 [foreach loop] (http://php.net/manual/en/control-structures.foreach.php). –

+1

"subcategory"라는 테이블 필드는 실제로 "parent_category"와 같아야합니다. 생각하지 않습니까? – siguy85

답변

3

당신은 먼저 결과 배열을 구성 할 필요가

$input = []; 
$query = "SELECT * FROM `categories`"; 
$result = mysql_query($query); 
while($row = mysql_fetch_array($result)){ 
    $input[] = $row; 
} 

$result = appendChildren($input); 

foreach($result as $row) 
{ 
    // open <li> tag 
    if(count($row["children"]) > 0) 
    { 
     foreach($children as $child) 
      // add ordered list 
    } 
    // close <li> tag 
} 
관련 문제