1

MySQLでは、私のテーブルは次のように表示されます。

MySQLでは、私のテーブルは次のように表示されます。

http://sqlfiddle.com/#!2/76717

CREATE TABLE IF NOT EXISTS `tbl_category` (
  `id` int(6) NOT NULL auto_increment,
  `parent_id` int(4) NOT NULL default '0',
  `name` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `parent_id` (`parent_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;


INSERT INTO `tbl_category` (`id`, `parent_id`, `name`) VALUES
(1, 0, 'Category 1'),
(2, 0, 'Category 2'),
(3, 0, 'Category 3'),
(4, 1, 'Category 1. 1'),
(5, 1, 'Category 1. 2'),
(6, 1, 'Category 1. 3'),
(7, 4, 'Category 1. 1. 1'),
(8, 4, 'Category 1. 1. 2'),
(9, 4, 'Category 1. 1. 3');

私の配列

私の配列

$arrCategories = array(
    array("id" => 1, "parent_id" => 0, "name" => "Category 1", "children" => array()
                array("id" => 4, "parent_id" => 1, "name" => "Category 1. 1", "children" => array()
                         array("id" => 7, "parent_id" => 4, "name" => "Category 1. 1. 1", "children" => array()),
                         array("id" => 8, "parent_id" => 4, "name" => "Category 1. 1. 2", "children" => array()),
                         array("id" => 9, "parent_id" => 4, "name" => "Category 1. 1. 3", "children" => array())
                                ),
                array("id" => 5, "parent_id" => 1, "name" => "Category 1. 2", "children" => array()),
                array("id" => 6, "parent_id" => 1, "name" => "Category 1. 3", "children" => array())        
        ),
    array("id" => 2, "parent_id" => 0, "name" => "Category 2", "children" => array()),
    array("id" => 3, "parent_id" => 0, "name" => "Category 3", "children" => array())
);

配列出力

配列出力

Array
(
    [id] => 1
    [parent_id] => 0
    [name] => Category 1
    [children] => Array
        (
            [4] => Array
                (
                    [id] => 4
                    [parent_id] => 1
                    [name] => Category 1. 1
                    [children] => Array
                        (
                            [7] => Array
                                (
                                    [id] => 7
                                    [parent_id] => 4
                                    [name] => Category 1. 1. 1
                                    [children] => Array
                                        (
                                        )

                                )

                            [8] => Array
                                (
                                    [id] => 8
                                    [parent_id] => 4
                                    [name] => Category 1. 1. 2
                                    [children] => Array
                                        (
                                        )

                                )

                            [9] => Array
                                (
                                    [id] => 9
                                    [parent_id] => 4
                                    [name] => Category 1. 1. 3
                                    [children] => Array
                                        (
                                        )

                                )

                        )

                )

            [5] => Array
                (
                    [id] => 5
                    [parent_id] => 1
                    [name] => Category 1. 2
                    [children] => Array
                        (
                        )

                )

            [6] => Array
                (
                    [id] => 6
                    [parent_id] => 1
                    [name] => Category 1. 3
                    [children] => Array
                        (
                        )

                )

        )

)
Array
(
    [id] => 2
    [parent_id] => 0
    [name] => Category 2
    [children] => Array
        (
        )

)
Array
(
    [id] => 3
    [parent_id] => 0
    [name] => Category 3
    [children] => Array
        (
        )

)

幅PHPにするにはどうすればよいですか?

幅PHPにするにはどうすればよいですか?

<ul>
 <li>Category 1
  <ul>
   <li>Category 1. 1
    <ul>
     <li>Category 1. 1. 1</li>
     <li>Category 1. 1. 2</li>
     <li>Category 1. 1. 3</li>
    </ul>
   </li>
   <li>Category 1. 2</li>
   <li>Category 1. 3</li>
  </ul>
 </li>
 <li>Category 2</li>
 <li>Category 3</li>
</ul>

これは正しく機能しません

これは正しく機能しません

<?php
echo "    <ul>\n";
foreach ($categories as $category) {
echo "     <li>".$category['ad'];

if ($category['children']) {
echo "      <ul>\n";
foreach ($category['children'] as $child) {
echo "       <li>".$child['ad']."</li>\n";
}
echo "      </ul>\n";
}
echo "     </li>\n";
}
echo "    </ul>\n";
?>

おかげで今私のために働いていますその機能... http://ideone.com/u2GNV

しかし、私は有効なulタグとliタグではないと思います...

http://ideone.com/u2GNVの結果

<ul>
 <li>Category 1
  <ul>
   <li>Category 1. 1
    <ul>
     <li>Category 1. 1. 1</li>
    </ul>
    <ul>
     <li>Category 1. 1. 2</li>
    </ul>
    <ul>
     <li>Category 1. 1. 3</li>
    </ul>
   </li>
  </ul>

  <ul>
   <li>Category 1. 2</li>
  </ul>

  <ul>
   <li>Category  1. 3</li>
  </ul>
 </li>
</ul>

<ul>
 <li>Category 2</li>
</ul>

<ul>
 <li>Category 3</li>
</ul>

私は有効なw3コードだと思います

<ul>
 <li>Category 1
  <ul>
   <li>Category 1. 1
    <ul>
     <li>Category 1. 1. 1</li>
     <li>Category 1. 1. 2</li>
     <li>Category 1. 1. 3</li>
    </ul>
   </li>
   <li>Category 1. 2</li>
   <li>Category 1. 3</li>
  </ul>
 </li>
 <li>Category 2</li>
 <li>Category 3</li>
</ul>
4

1 に答える 1

5

menu likeそのすべての配列をブロックに解析して再帰を使用する関数を作成できます。

そのアレイの場合:

function printMenu($array){
    foreach($array as $item){
        if(is_array($item) && isset($item['name'])){
            echo "<ul>\n";

                if(is_array($item['children'])){
                    echo "<li>".$item['name'];
                    printMenu($item);
                    echo "</li>\n";
                } else {
                    echo "<li>".$item['name']."</li>\n";
                }

            echo "</ul>\n\n";
        }
    }
}

mysqlリソースから(テーブルに基づく):

$db = new PDO('mysql:host=localhost;dbname=test', 'root', '', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));


function printMenu($array){
    foreach($array as $item){
        if(is_array($item) && isset($item['name'])){
            echo "<ul>\n";
                if(getChildren($item['id'], false)){
                    echo "<li>".$item['name'];
                    printMenu(getChildren($item['id'], true));
                    echo "</li>\n";
                } else {
                    echo "<li>".$item['name']."</li>\n";
                }

            echo "</ul>\n\n";
        }
    }
}

function getChildren($id, $return = false){
    global $db;
    $stmt = $db->prepare("SELECT * FROM `tbl_category` WHERE `parent_id` = :parent_id");
    $stmt->execute(array(':parent_id' => $id));
    $num = $stmt->rowCount();
    if($num){
        if($return){
            $row = $stmt->fetchAll(PDO::FETCH_ASSOC);
            return $row;
        }
        return true;
    }
    return false;
}


$query = "SELECT * FROM `tbl_category` WHERE `parent_id` = 0";
$stmt = $db->query($query);
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
printMenu($row);

結果:

  • カテゴリー1
    • カテゴリ1.1
      • カテゴリ1。1。1
      • カテゴリ1.1.2
      • カテゴリ1。1。3
    • カテゴリ1.2
    • カテゴリ1.3
  • カテゴリー2
  • カテゴリー3
于 2012-09-15T22:28:22.023 に答える