在我的下面模式中,slug被保存为
$parent_slug . '_' . url_title($posted_category_name)
。
因此,如果id_category = 1
的段塞发生变化,例如Acura => My acura
,则表示所有子段塞必须按照更改,但在循环期间再次使用$parent_slug . '_' . url_title($posted_category_name)
...但是如何?
在我的数组之后,我添加了递归函数。
数据阵列
Array
(
[0] => Array
(
[id_category] => 1
[id_parent] => 0
[level] => 1
[category] => Acura
[slug] => acura
[children] => Array
(
[0] => Array
(
[id_category] => 3
[id_parent] => 1
[level] => 2
[category] => Vigor
[slug] => acura_vigor
[children] => Array
(
[0] => Array
(
[id_category] => 5
[id_parent] => 3
[level] => 3
[category] => LS
[slug] => acura_vigor_ls
[children] => Array
(
[0] => Array
(
[id_category] => 6
[id_parent] => 5
[level] => 4
[category] => Alt 1
[slug] => acura_vigor_ls_alt-1
)
[1] => Array
(
[id_category] => 7
[id_parent] => 5
[level] => 4
[category] => Alt 2
[slug] => acura_vigor_ls_alt-2
)
)
)
)
)
)
)
)
rebuild_category_slug_index($ target_map)
function rebuild_category_slug_index($target_table)
{
$active_table = tr_url_title($target_table);
$this->db->table_exists('my_'.$active_table ) || show_error(lang('admin|erros|table_not_found'),'500',lang('admin|errors|header500'));
$raw_data = $this->category_m->get('my_'.$active_table,array(),$order_str='id_category asc, id_parent asc',array(),'result_array'); // It just returns get all from table.
if($raw_data)
{
$treearr = array('0' => array('children'=> array()));
foreach($raw_data as $item)
{
// Here is the work. I should get $parent_slug and create current slug.
// $item['slug'] = $parent_slug . '_' . tr_url_title($item['category']);
$treearr[$item['id_category']] = $item;
if(!isset($treearr[$item['id_parent']])) $treearr[$item['id_parent']] = array('children'=> array());
$treearr[$item['id_parent']]['children'][] = &$treearr[$item['id_category']];
}
$tree = $treearr[0]['children'];
unset($treearr);
vdebug($tree); // For displaying formatted results
//return $tree;
}
}
我对此充满了感激之情。
答案 0 :(得分:1)
我会将数据恢复从函数中拉出来,或者创建一个新的递归函数。只是让你入门的东西:
function recursive_rename($data, $parent_slug='')
{
foreach($data as $item)
{
// Set the $parent_slug
if($imen['level'] = 1)
{
$item['slug'] = $item['category'];
if ($parent_slug == '' || $parent_slug <> $item['category'])
{
$parent_slug = $item['category']
}
}
else
{
$item['slug'] = $parent_slug."_".$item['category'];
}
if(isset($item[children]))
{
// call function again
$out = recursive_rename($item['children'], $item['slug']);
}