在递归循环中使用父数据

时间:2013-10-16 09:44:19

标签: php mysql codeigniter recursion slug

在我的下面模式中,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;
    }
  }

我对此充满了感激之情。

1 个答案:

答案 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']);
      }