2016-10-15 15 views
2

私はカテゴリとサブカテゴリを作る際の能力がある私のプロジェクトに取り組んでいます。私は私のデータベースに行ったことはsubcategory columncategory_key columnPHP foreachのカテゴリとサブカテゴリ

意味との関係を有することである、subcategory columnに値を持たないすべてのレコードは、カテゴリとみなされ、残りはサブカテゴリがあります。下の画像に

  • ba
  • e, g, hのサブカテゴリですd

enter image description here

そして今、私はdiplayするためにこのコードを使用していますのサブカテゴリありそれは私のページにあります:

<?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 
} 
関連する問題