我的数据库结构看起来像
id|parent_id|category_name|
1 | 0 |Vehicle
2 | 0 |Tv
3 | 0 |Phone
4 | 1 |Bmw X Series
5 | 2 |Led Tv
6 | 2 |Plazma Tv
7 | 3 |Samsung
8 | 3 |Iphone
9 | 4 |Bmw X7
如果我们假设我们知道子类别,我们如何才能找到最高类别。 例如: 当parent_id = 2时
我如何创建以下输出或衍生物
电视>带领电视
当parent_id = 4时
车辆> Bmw X系列>宝马X7
我的代码:
function get_key($arr, $id)
{
foreach ($arr as $key => $val) {
if ($val['id'] === $id) {
return $key;
}
}
return null;
}
function get_parent($arr, $id)
{
$key = get_key($arr, $id);
if ($arr[$key]['parent_id'] == 0)
{
return $id;
}
else
{
return get_parent($arr, $arr[$key]['parent_id']);
}
}
答案 0 :(得分:1)
你根本不需要递归。第一个函数 - get_key - 很好。但是你需要改变的第二个。你应该用id来改变逻辑。如果您在start id下有一些子类别,则结果将是未定义的。您可以从根目录创建路径到类别,然后设置
function breadcrumbs($arr, $id) {
$ret = [];
// untill top category or incorrect data
while ($id and ! is_null($key = get_key($arr, $id))) {
// save current category name
array_unshift($ret, $arr[$key]['category_name']);
// step up
$id = $arr[$key]['parent_id'];
}
return implode(' > ', $ret);
}
echo breadcrumbs($arr, 9); // Vehicle > Bmw X Series > Bmw X7
答案 1 :(得分:0)
您可以使用recurcive功能:
function getById($array, $id){
foreach ($array as $a) {
if ($a['id'] == $id) {
return $a;
}
}
return null;
}
function findP($arr, $id) {
$search = getById($arr, $id);
$parentId = $search['parent_id'];
if ($parentId == 0) {
return $search['id'];
}
return findP($arr, $parentId);
}