2013-05-01 125 views
1

即時通訊編寫一個遞歸函數,如果它有一個數組的孩子。現在我想知道數組進入尋找孩子的級別。 爲如在codeigniter助手中的全局變量

Array 
(
[0] => stdClass Object 
    (
     [fld_id] => 7 
     [fld_value] => Color 
     [fld_price] => 0.00 
     [fld_attribute_id] => 2 
     [fld_parent_id] => 5 
     [children] => Array 
      (
       [0] => stdClass Object 
        (
         [fld_id] => 8 
         [fld_value] => Red 
         [fld_price] => 12.00 
         [fld_attribute_id] => 2 
         [fld_parent_id] => 7 
         [children] => Array 
          (
           [0] => stdClass Object 
            (
             [fld_id] => 10 
             [fld_value] => light red 
             [fld_price] => 20.00 
             [fld_attribute_id] => 2 
             [fld_parent_id] => 8 
             [children] => Array 
              (
              ) 

            ) 

           [1] => stdClass Object 
            (
             [fld_id] => 11 
             [fld_value] => dark red 
             [fld_price] => 4.00 
             [fld_attribute_id] => 2 
             [fld_parent_id] => 8 
             [children] => Array 
              (
               [0] => stdClass Object 
                (
                 [fld_id] => 14 
                 [fld_value] => double_dark 
                 [fld_price] => 3.00 
                 [fld_attribute_id] => 2 
                 [fld_parent_id] => 11 
                 [children] => Array 
                  (
                  ) 

                ) 

               [1] => stdClass Object 
                (
                 [fld_id] => 15 
                 [fld_value] => single_dark 
                 [fld_price] => 0.00 
                 [fld_attribute_id] => 2 
                 [fld_parent_id] => 11 
                 [children] => Array 
                  (
                  ) 

                ) 

              ) 

            ) 

          ) 

        ) 

       [1] => stdClass Object 
        (
         [fld_id] => 9 
         [fld_value] => Green 
         [fld_price] => 5.00 
         [fld_attribute_id] => 2 
         [fld_parent_id] => 7 
         [children] => Array 
          (
          ) 

        ) 

      ) 

    ) 

) 

和我遞歸函數低於它是用笨幫手

function get_children_by_par_id($parent_id) 
{ 
$children = get_children($parent_id); 
$return_value = array(); 
foreach($children->result() as $result) 
{ 
    $result->children = get_children_by_par_id($result->fld_id); 
    $return_value[]= $result; 
} 
return ($return_value); 
} 

function get_children($id){ 
    $CI = get_instance(); 
    $CI->db->where('fld_parent_id',$id); 
    return $CI->db->get('tbl_attribute_values'); 
} 

現在我想數着多少級做它該陣列的深度走到裏面使用相同的遞歸函數我試圖計算它在遞歸函數裏面的水平,例如get_children_by_par_id($parent_id)。但由於遞歸函數count被初始化爲其原始值。所以我需要在助手中創建一個全局變量。所以任何一個可以幫助我在這裏....或者你可以給我最好的主意來計算陣列的深度和肯定陣列可以去到N級 ...

回答

0

幫我出go here 。我做了一些轉變,並轉向代碼和進一步的參考,你可以Visit here。你可以在codeigniter中創建一個全局變量。

0

您可以聲明一個變量來計算班級中的水平,然後用它來計算函數get_children_by_par_id中的水平。

正如您在test_function中看到的那樣,您可以在調用該函數後獲得$count變量的值,然後如果需要再次調用該函數,則必須將其重置。

class yourClass extends somthing{ 
     $count = 0; 
     function get_children_by_par_id($parent_id){ 
      $children = get_children($parent_id); 
      $return_value = array(); 
      foreach($children->result() as $result){ 
       $result->children = get_children_by_par_id($result->fld_id); 
       $this->count++; 
       $return_value[]= $result; 
      } 
      return ($return_value); 
     } 

     function get_children($id){ 
      $CI = get_instance(); 
      $CI->db->where('fld_parent_id',$id); 
      return $CI->db->get('tbl_attribute_values'); 
     } 
     function test_function(){ 
      $childs = $this->get_children_by_par_id(1); 
      $childs_count = $this->count; // get the levels count 
      $this->count = 0; //reset the counter 
     } 

    } 
+0

它是不是類它只是一個幫手,我們做的只有功能閒來無事... – Robz 2013-05-01 05:48:17

+0

那麼你需要使用配置文件來創建一個全局變量,你可以在這裏看到細節的http:// ellislab。 com/codeigniter/user-guide/libraries/config.html – 2013-05-01 05:57:56

+0

該函數也被另一個循環調用,所以我想循環再次初始化爲0 – Robz 2013-05-01 06:52:48