我遇到以下代码问题。我现在正在尝试一段时间,我相信我必须是盲目的,我没有看到明显的东西。你能指出这个显而易见的事吗?
功能应该是所有类别和它的名称。正确获取ID,但仅为第一个类别和第一个子类别命名。
function collect($id, $current = null) {
global $db_1;
$s = "SELECT category.id as id, category_i18n.name as name from category,category_i18n WHERE category.parent_id= '$id' AND category.visible = '1' AND category_i18n.culture='en' AND category.id = category_i18n.id ORDER BY category.order_asc ASC";
$r = mysql_query($s, $db_1);
$row = mysql_fetch_array($r);
$children = array();
if (mysql_num_rows($r) > 0) {
while ($row) {
$children['name'] = $row['name'];
$children[$row['id']] = collect($row['id']);
}
}
else
{
$children['name'] = $row['name'];
}
return $children;
}
编辑:
EDIT2:
更改后我得到这样的数组:
array(3) {
["name"]=>
string(9) "Cat"
["id"]=>
string(5) "10404"
["children"]=>
array(3) {
["name"]=>
string(10) "Subcat"
["id"]=>
string(5) "10410"
["children"]=>
bool(false)
}
}
我认为这不是mysql查询的问题,因为在phpmyadmin它可以工作并正确显示所有数据......
答案 0 :(得分:2)
更新:
您似乎只有1级子目录。你的功能是这样的:
1)首先,它获取给定类别的名称和ID。
2)它使用获取的id来获取子类的名称,该子类具有parent_id =先前获取的id。
3)问题来了。由于递归,它再次使用此子类别的id调用collect()
。但是没有子类别,所以它返回null。
即,
第一家长(id1) - >子类别(id2) - >子类别(id2)等等。
您可以使用它来获得任意数量的类别:
function collect($id, $current = null) {
global $db_1;
$s = "SELECT category.id as id, category_i18n.name as name from category,category_i18n WHERE category.parent_id= '$id' AND category.visible = '1' AND category_i18n.culture='en' AND category.id = category_i18n.id ORDER BY category.order_asc ASC";
$r = mysql_query($s, $db_1);
$temp = array();
if(mysql_num_rows($r) > 0)
{
while($row = mysql_fetch_array($r))
{
$temp[$row['id']]['name'] = $row['name'];
$temp[$row['id']]['children'] = collect($row['id']); //Get further children (Recursive)
if(!$temp[$row['id']]['children']) {continue;} // If FALSE is returned, means that this category has no sub categories. Move onto next one.
}
}
else {return FALSE;} //No rows present, return FALSE
return $temp;
}
此代码未经过测试。您将获得以下格式的数组
$parent[parent_id] -> [name]
-> [children] -> FALSE (if subdirectories are not present)
-> [children_id] #1 -> [name]
-> [children]
-> [children_id] #2 and so on.
更新:你只获得了最后的结果,因为我忘记了一件事。每次在循环中都会覆盖$temp[]
数组。