2015-02-07 81 views
-2

MySQL查詢和一些轉變,我有以下陣列後:如何獲得在陣列結構父的所有子

$users = Array 
(
    [0] => Array 
     (
      [id] => 1 
      [parent_id] => 
      [token] => ADCUN5EW5FAR 
      [token_parent_id] => 
      [name] => NODE 
      [payment] => 1 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [parent_id] => 1 
      [token] => N9KWQQV1W1K5 
      [token_parent_id] => ADCUN5EW5FAR 
      [name] => NODE 1 
      [payment] => 1 
     ) 

    [2] => Array 
     (
      [id] => 4 
      [parent_id] => 2 
      [token] => 5NAKJYKUD1X2 
      [token_parent_id] => N9KWQQV1W1K5 
      [name] => NODE 1-1 
      [payment] => 0 
     ) 

    [3] => Array 
     (
      [id] => 5 
      [parent_id] => 4 
      [token] => 8EMAEK9XFRFZ 
      [token_parent_id] => 5NAKJYKUD1X2 
      [name] => NODE 1-1-1 
      [payment] => 0 
     ) 

    [4] => Array 
     (
      [id] => 6 
      [parent_id] => 4 
      [token] => Z9XFZ2EZ38VR 
      [token_parent_id] => 5NAKJYKUD1X2 
      [name] => NODE 1-1-2 
      [payment] => 0 
     ) 

    [5] => Array 
     (
      [id] => 3 
      [parent_id] => 1 
      [token] => R751DRTJ1EKW 
      [token_parent_id] => ADCUN5EW5FAR 
      [name] => NODE 2 
      [payment] => 0 
     ) 

    [6] => Array 
     (
      [id] => 7 
      [parent_id] => 3 
      [token] => DR6NGPDAZN25 
      [token_parent_id] => R751DRTJ1EKW 
      [name] => NODE 2-1 
      [payment] => 0 
     ) 

); 

,如果我有一個給定id,我需要創建下列陣列結構根據ID項目,例如,如果給定的ID爲1,我需要的數組:

Array 
(
    [ADCUN5EW5FAR] => Array 
     (
      [node] => Array 
       (
        [id] => 1 
        [parent_id] => 
        [token] => ADCUN5EW5FAR 
        [token_parent_id] => 
        [name] => NODE 
        [payment] => 1 
       ) 

      [children] => Array 
       (
        [N9KWQQV1W1K5] => Array 
         (
          [node] => Array 
           (
            [id] => 2 
            [parent_id] => 1 
            [token] => N9KWQQV1W1K5 
            [token_parent_id] => ADCUN5EW5FAR 
            [name] => NODE 1 
            [payment] => 1 
           ) 

          [children] => Array 
           (
            [5NAKJYKUD1X2] => Array 
             (
              [node] => Array 
               (
                [id] => 4 
                [parent_id] => 2 
                [token] => 5NAKJYKUD1X2 
                [token_parent_id] => N9KWQQV1W1K5 
                [name] => NODE 1-1 
                [payment] => 0 
               ) 

              [children] => Array 
               (
                [8EMAEK9XFRFZ] => Array 
                 (
                  [node] => Array 
                   (
                    [id] => 5 
                    [parent_id] => 4 
                    [token] => 8EMAEK9XFRFZ 
                    [token_parent_id] => 5NAKJYKUD1X2 
                    [name] => NODE 1-1-1 
                    [payment] => 0 
                   ) 

                  [children] => Array 
                   (
                   ) 

                 ) 

                [Z9XFZ2EZ38VR] => Array 
                 (
                  [node] => Array 
                   (
                    [id] => 6 
                    [parent_id] => 4 
                    [token] => Z9XFZ2EZ38VR 
                    [token_parent_id] => 5NAKJYKUD1X2 
                    [name] => NODE 1-1-2 
                    [payment] => 0 
                   ) 

                  [children] => Array 
                   (
                   ) 

                 ) 

               ) 

             ) 

           ) 

         ) 

        [R751DRTJ1EKW] => Array 
         (
          [node] => Array 
           (
            [id] => 3 
            [parent_id] => 1 
            [token] => R751DRTJ1EKW 
            [token_parent_id] => ADCUN5EW5FAR 
            [name] => NODE 2 
            [payment] => 0 
           ) 

          [children] => Array 
           (
            [DR6NGPDAZN25] => Array 
             (
              [node] => Array 
               (
                [id] => 7 
                [parent_id] => 3 
                [token] => DR6NGPDAZN25 
                [token_parent_id] => R751DRTJ1EKW 
                [name] => NODE 2-1 
                [payment] => 0 
               ) 

              [children] => Array 
               (
               ) 

             ) 

           ) 

         ) 

       ) 

     ) 

) 

我需要編寫的代碼,以獲得這一新陣,從不同的一個ID開始從1,但使用原始的$ users數組。有人可以幫我嗎?先謝謝你。

回答

0

不是很漂亮,但仍然緊湊,工作:

$users = array(
    array 
     (
      'id' => 1, 
      'parent_id' => '', 
      'token' => 'ADCUN5EW5FAR', 
      'token_parent_id' =>'' , 
      'name' => 'NODE', 
      'payment' => 1 
     ), 

    array 
     (
      'id' => 2, 
      'parent_id' => 1, 
      'token' => 'N9KWQQV1W1K5', 
      'token_parent_id' =>'ADCUN5EW5FAR' , 
      'name' => 'NODE 1', 
      'payment' => 1 
     ), 

    array 
     (
      'id' => 4, 
      'parent_id' => 2, 
      'token' => '5NAKJYKUD1X2', 
      'token_parent_id' =>'N9KWQQV1W1K5' , 
      'name' => 'NODE 1-1', 
      'payment' => 0 
     ), 

    array 
     (
      'id' => 5, 
      'parent_id' => 4, 
      'token' => '8EMAEK9XFRFZ', 
      'token_parent_id' =>'5NAKJYKUD1X2' , 
      'name' => 'NODE 1-1-1', 
      'payment' => 0 
     ), 

    array 
     (
      'id' => 6, 
      'parent_id' => 4, 
      'token' => 'Z9XFZ2EZ38VR', 
      'token_parent_id' =>'5NAKJYKUD1X2' , 
      'name' => 'NODE 1-1-2', 
      'payment' => 0 
     ), 

    array 
     (
      'id' => 3, 
      'parent_id' => 1, 
      'token' => 'R751DRTJ1EKW', 
      'token_parent_id' =>'ADCUN5EW5FAR' , 
      'name' => 'NODE 2', 
      'payment' => 0 
     ), 

    array 
     (
      'id' => 7, 
      'parent_id' => 3, 
      'token' => 'DR6NGPDAZN25', 
      'token_parent_id' =>'R751DRTJ1EKW' , 
      'name' => 'NODE 2-1', 
      'payment' => 0 
     ) 

); 

function getBranches($arr, $id) { 
    $childrenArr = array(); 
    foreach($arr as $item) { 
     if ($item['parent_id']==$id) { 
      $childrenArr[] = $item; 
     } 
    } 
    return $childrenArr; 
} 

function getBranch($arr, $id) { 
    $branch = array(); 
    foreach($arr as $item) { 

     if ($item['id'] == $id) { 
      $branch[$item['token']]['node'] = $item; 
      $branches = getBranches($arr, $id); 
      $children = array(); 
      foreach($branches as $child) { 
       $b = getBranch($arr, $child['id']); 
       foreach ($b as $token => $child) { 
        $children[$token] = $child; 
       } 
      } 
      $branch[$item['token']]['children'] = $children; 
      break; 
     } 
    } 
    if (count($branch)==0) echo 'WARNING '.$id; 
    return $branch; 
} 

print_r(getBranch($users,1)); 
print_r(getBranch($users,4)); 
+0

哇!非常感謝你。這是一個很好的解決方案。只有一個問題:如果我想爲兒童添加一個限制直到達到N深度級別,那麼我需要添加到此代碼中? – 2015-02-08 02:23:41