创建新的索引。
我正在尝试编写一个递归函数,该函数可以钻回深度未知的巢的根类别。
[TABLE]
cat_id | cat_name | cat_parent | cat_slug
//each category with a cat_parent of 0 is a root category
[/TABLE]
示例SQL结果:
Array
(
[0] => Array
(
[cat_id] => 17
[cat_name] => another-test-category
[cat_parent] => 16
[cat_slug] => Another test category
)
)
功能:
function breadcrumb($cat_id){
$cat_nest =
SELECT *
FROM table
WHERE cat_id = '$cat_id'
//returns 1 row;
$cat_array[$cat_id] = $cat_nest[0];
if($cat_nest[0]['cat_parent'] != 0){
$cat_array[] = breadcrumb($cat_nest[0]['cat_parent']);
}
return $cat_array;
}
输出:
Array
(
[17] => Array
(
[cat_id] => 17
[cat_name] => test.example.1
[cat_parent] => 16
[cat_slug] => Test Example 1
)
[18] => Array
(
[16] => Array
(
[cat_id] => 16
[cat_name] => test.example.2
[cat_parent] => 15
[cat_slug] => Test Example 2
)
[17] => Array
(
[15] => Array
(
[cat_id] => 15
[cat_name] => test.example.3
[cat_parent] => 6
[cat_slug] => Test Example 3
)
[16] => Array
(
[6] => Array
(
[cat_id] => 6
[cat_name] => test.example.4
[cat_parent] => 2
[cat_slug] => Test Example 4
)
[7] => Array
(
[2] => Array
(
[cat_id] => 2
[cat_name] => test.example.5
[cat_parent] => 0
[cat_slug] => Test Example 5
)
)
)
)
)
)
所需输出:Array
(
[17] => Array
(
[cat_id] => 17
[cat_name] => test.example.1
[cat_parent] => 16
[cat_slug] => Test Example 1
)
[16] => Array
(
[cat_id] => 16
[cat_name] => test.example.2
[cat_parent] => 15
[cat_slug] => Test Example 2
)
[15] => Array
(
[cat_id] => 15
[cat_name] => test.example.3
[cat_parent] => 6
[cat_slug] => Test Example 3
)
[6] => Array
(
[cat_id] => 6
[cat_name] => test.example.4
[cat_parent] => 2
[cat_slug] => Test Example 4
)
[2] => Array
(
[cat_id] => 2
[cat_name] => test.example.5
[cat_parent] => 0
[cat_slug] => Test Example 5
)
)
我进行了一些测试,我认为解决方案可以这样实现:
function breadcrumb($cat_id){
$cat_nest =
SELECT *
FROM table
WHERE cat_id = '$cat_id'
//returns 1 row;
$cat_array[$cat_id] = $cat_nest[0];
if($cat_nest[0]['cat_parent'] != 0){
$cat_array = array_merge( $cat_array, breadcrumb($cat_nest[0]['cat_parent']) );
}
return $cat_array;
}
这将完全按照您需要的方式维护id,因为这只会合并数组,而不会使用$cat_array[]
考虑使用do-while-loop:
function breadcrumb($cat_id) {
$cat_array = array();
do {
$cat_nest =
SELECT *
FROM table
WHERE cat_id = '$cat_id';
$cat_array[$cat_id] = $cat_nest[0];
$cat_id = $cat_nest[0]['catparent'];
} while ($cat_id != 0)
return $cat_array;
}
这样,您还可以轻松地识别'第一个'面包屑,并为它添加额外的代码,如声明数组。