制作HTML类别列表(PHP)
我有一个名为Category的表,遵循以下模式: id |姓名|家长| id 所以,如果类别x是y的子类,那么x的父类id就是y的id 我还有一个函数,它返回一个包含每行所有列的数组 其返回格式如下: 返回的数组[category\u id1]=数组([category\u name],[category\u parent\u id] 返回的数组[category\u id2]=数组([category\u name],[category\u parent\u id] 等等…它负责将所有类别提取到一个数组中 现在我想编写一个函数,它将返回制作HTML类别列表(PHP),php,mysql,html,categories,Php,Mysql,Html,Categories,我有一个名为Category的表,遵循以下模式: id |姓名|家长| id 所以,如果类别x是y的子类,那么x的父类id就是y的id 我还有一个函数,它返回一个包含每行所有列的数组 其返回格式如下: 返回的数组[category\u id1]=数组([category\u name],[category\u parent\u id] 返回的数组[category\u id2]=数组([category\u name],[category\u parent\u id] 等等…它负责将所有类别提取
<li>Category 1
<li>Child 1</li>
<li>Child 2
<li>Child x</li>
</li>
</li>
<li>Category 2
<li>Child 1</li>
// etc
</li>
类别1
儿童1
儿童2
儿童x
第2类
儿童1
//等
我在这件事上伤了脑筋,但我就是想不出一个办法……在这种情况下,您需要两个数组来轻松处理它,而不需要复杂的,第一个数组应该包含所有类别,例如) 第二个数组应该只有父Id作为键,子数组作为值(例如) 现在,您可以在$subcarr数组中循环,并且还有一个循环用于生成child并从$catar数组中获取类别名称 您可以使用这种方法,这种方法非常常用,也非常简单,
首先运行查询以获取categoryname和distinct parent Id,并通过它进行循环,然后在循环内部运行另一个查询以获取所有记录,这些记录的父Id为当前循环Id。尝试此操作。我没有测试它是否有错误,但想法就在这里
<?php
$aCats = array(
1 = array(
'name'=>'Category 1',
'childs'=> array(
2 = array(
'name'=>'Category 1 - A',
'childs'=> array();
);
);
);
);
function printParentChild($aCats)
{
$sHtml = '';
foreach($aCats as $aCat)
{
if(array_key_exists('childs', $aCat) && is_array($aCat['childs']) )
$sHtml .= printParentChild($aCat['childs']);
$sHtml .= '<li>'.$aCat.'</li>';
}
return '<ul>'.$sHtml.'</ul>';
}
echo $aCats;
为什么不抓住父对象,循环遍历它们,并在循环遍历时使用父对象的ID查询子对象的可能重复项与问题不直接相关,但您的标记不正确,您不能直接将一个嵌套在另一个中。您必须将另一个列表(
或)放在父中,并将您的子元素放在其中。
$subCatArr[parentId] = Array([0]=>firstChildId, [1]=> secondChildId ..etc)
$subCatArr[parentId] = Array([0]=>firstChildId, [1]=> secondChildId ..etc)
<?php
$aCats = array(
1 = array(
'name'=>'Category 1',
'childs'=> array(
2 = array(
'name'=>'Category 1 - A',
'childs'=> array();
);
);
);
);
function printParentChild($aCats)
{
$sHtml = '';
foreach($aCats as $aCat)
{
if(array_key_exists('childs', $aCat) && is_array($aCat['childs']) )
$sHtml .= printParentChild($aCat['childs']);
$sHtml .= '<li>'.$aCat.'</li>';
}
return '<ul>'.$sHtml.'</ul>';
}
echo $aCats;