2017-04-25 26 views
1

多次元配列の再帰的なPHPを平らにする方法。 このlinkコードで試しましたが、動作しません。私は他の多くのリンクも試しましたが、動作しませんでした。 Thisこの配列の作成にはコードが使用されています。多次元配列の再帰的なPHPを平らにする方法

public function downline_income($userId = null, $offset = 0) { 
    $userId = user::id(); 
    $limit = AZ::setting('record_per_page'); 
    $objUser = new stdClass(); 
    $objUser->id = $userId; 
    $downline = $this->user->getDownline($objUser); 

    AZ::layout('left-content', array(
     'block' => 'account/downline_income', 
     'user' => $userId, 
     'total_users' => $total_users, 
     'pagination' => $pagination, 
     'q' => $userId, 
     'data' => $downline, 
     'offset' => $offset, 
    )); 
} 

public function getDownline($obj, $level = 0) { 
    $obj->level = $level; 

    $where = array('parent_id' => $obj->id); 
    $this->db->select('users.*'); 
    $this->db->where($where); 

    $query = $this->db->get('users')->result(); 

    foreach ($query as $objUser) { 
     $obj->data[] = $this->getDownline($objUser, ($level + 1)); 
    } 

    return $obj; 
} 

ここで私は平坦化する必要がある配列です。

Array 
(
    [0] => stdClass Object 
     (
      [id] => 1135 
      [gid] => 4 
      [parent_id] => 1112 
      [username] => sdafasdf 
      [email] => [email protected] 
      [name] => sdafsda 
      [status] => 0 
      [registerd] => 2017-04-19 15:44:38 
      [last_login] => 0000-00-00 00:00:00 
      [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
      [tranjection_password] => 
      [package_id] => 5 
      [user_id] => 1135 
      [purchase_date] => 2017-04-19 15:44:39 
      [confirm_date] => 0000-00-00 00:00:00 
      [package_name] => USD 500 
      [amount] => 500 
      [daily_income] => 12 
      [total_income] => 600 
      [time_duration] => 60 
      [level] => 1 
     ) 

    [1] => stdClass Object 
     (
      [id] => 1134 
      [gid] => 4 
      [parent_id] => 1112 
      [username] => sdaf254 
      [email] => [email protected] 
      [name] => categoryA 
      [status] => 0 
      [registerd] => 2017-04-19 15:36:11 
      [last_login] => 0000-00-00 00:00:00 
      [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
      [tranjection_password] => 
      [package_id] => 4 
      [user_id] => 1134 
      [purchase_date] => 2017-04-20 00:00:00 
      [confirm_date] => 0000-00-00 00:00:00 
      [package_name] => USD 250 
      [amount] => 250 
      [daily_income] => 12 
      [total_income] => 600 
      [time_duration] => 60 
      [level] => 1 
     ) 

    [2] => stdClass Object 
     (
      [id] => 1136 
      [gid] => 4 
      [parent_id] => 1112 
      [username] => test 
      [email] => [email protected] 
      [name] => test 
      [status] => 0 
      [registerd] => 2017-04-20 08:49:25 
      [last_login] => 2017-04-21 10:42:25 
      [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
      [tranjection_password] => 
      [package_id] => 7 
      [user_id] => 1136 
      [purchase_date] => 2017-04-20 08:49:25 
      [confirm_date] => 0000-00-00 00:00:00 
      [package_name] => USD 2500 
      [amount] => 2500 
      [daily_income] => 12 
      [total_income] => 600 
      [time_duration] => 60 
      [level] => 1 
      [data] => Array 
       (
        [0] => stdClass Object 
         (
          [id] => 1148 
          [gid] => 4 
          [parent_id] => 1136 
          [username] => test_downline 
          [email] => [email protected] 
          [name] => test_downline 
          [status] => 0 
          [registerd] => 2017-04-21 10:42:56 
          [last_login] => 2017-04-21 11:08:00 
          [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
          [tranjection_password] => 
          [package_id] => 9 
          [user_id] => 1148 
          [purchase_date] => 2017-04-21 10:42:56 
          [confirm_date] => 0000-00-00 00:00:00 
          [package_name] => USD 10000 
          [amount] => 10000 
          [daily_income] => 12 
          [total_income] => 600 
          [time_duration] => 60 
          [level] => 2 
          [data] => Array 
           (
            [0] => stdClass Object 
             (
              [id] => 1150 
              [gid] => 4 
              [parent_id] => 1148 
              [username] => test1_downline1 
              [email] => [email protected] 
              [name] => test1_downline1 
              [status] => 0 
              [registerd] => 2017-04-21 11:08:27 
              [last_login] => 0000-00-00 00:00:00 
              [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
              [tranjection_password] => 
              [package_id] => 5 
              [user_id] => 1150 
              [purchase_date] => 2017-04-21 11:08:27 
              [confirm_date] => 0000-00-00 00:00:00 
              [package_name] => USD 500 
              [amount] => 500 
              [daily_income] => 12 
              [total_income] => 600 
              [time_duration] => 60 
              [level] => 3 
             ) 

           ) 

         ) 

        [1] => stdClass Object 
         (
          [id] => 1149 
          [gid] => 4 
          [parent_id] => 1136 
          [username] => test_downline2 
          [email] => [email protected] 
          [name] => test_downline2 
          [status] => 0 
          [registerd] => 2017-04-21 11:06:35 
          [last_login] => 0000-00-00 00:00:00 
          [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
          [tranjection_password] => 
          [package_id] => 6 
          [user_id] => 1149 
          [purchase_date] => 2017-04-21 11:06:35 
          [confirm_date] => 0000-00-00 00:00:00 
          [package_name] => USD 1000 
          [amount] => 1000 
          [daily_income] => 12 
          [total_income] => 600 
          [time_duration] => 60 
          [level] => 2 
         ) 

       ) 

     ) 

    [3] => stdClass Object 
     (
      [id] => 1137 
      [gid] => 4 
      [parent_id] => 1112 
      [username] => test2 
      [email] => [email protected] 
      [name] => test 2 
      [status] => 0 
      [registerd] => 2017-04-20 08:54:59 
      [last_login] => 0000-00-00 00:00:00 
      [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
      [tranjection_password] => 
      [package_id] => 6 
      [user_id] => 1137 
      [purchase_date] => 2017-04-20 08:55:00 
      [confirm_date] => 0000-00-00 00:00:00 
      [package_name] => USD 1000 
      [amount] => 1000 
      [daily_income] => 12 
      [total_income] => 600 
      [time_duration] => 60 
      [level] => 1 
     ) 

私は以下のコードで試してみましたが、それは唯一のレベル

Array 
(
    [0] => stdClass Object 
     (
      [id] => 1135 
      [gid] => 4 
      [parent_id] => 1112 
      [username] => sdafasdf 
      [email] => [email protected] 
      [name] => sdafsda 
      [status] => 0 
      [registerd] => 2017-04-19 15:44:38 
      [last_login] => 0000-00-00 00:00:00 
      [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
      [tranjection_password] => 
      [package_id] => 5 
      [user_id] => 1135 
      [purchase_date] => 2017-04-19 15:44:39 
      [confirm_date] => 0000-00-00 00:00:00 
      [package_name] => USD 500 
      [amount] => 500 
      [daily_income] => 12 
      [total_income] => 600 
      [time_duration] => 60 
      [level] => 1 
     ) 

    [1] => stdClass Object 
     (
      [id] => 1134 
      [gid] => 4 
      [parent_id] => 1112 
      [username] => sdaf254 
      [email] => [email protected] 
      [name] => categoryA 
      [status] => 0 
      [registerd] => 2017-04-19 15:36:11 
      [last_login] => 0000-00-00 00:00:00 
      [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
      [tranjection_password] => 
      [package_id] => 4 
      [user_id] => 1134 
      [purchase_date] => 2017-04-20 00:00:00 
      [confirm_date] => 0000-00-00 00:00:00 
      [package_name] => USD 250 
      [amount] => 250 
      [daily_income] => 12 
      [total_income] => 600 
      [time_duration] => 60 
      [level] => 1 
     ) 

    [2] => stdClass Object 
     (
      [id] => 1136 
      [gid] => 4 
      [parent_id] => 1112 
      [username] => test 
      [email] => [email protected] 
      [name] => test 
      [status] => 0 
      [registerd] => 2017-04-20 08:49:25 
      [last_login] => 2017-04-21 10:42:25 
      [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
      [tranjection_password] => 
      [package_id] => 7 
      [user_id] => 1136 
      [purchase_date] => 2017-04-20 08:49:25 
      [confirm_date] => 0000-00-00 00:00:00 
      [package_name] => USD 2500 
      [amount] => 2500 
      [daily_income] => 12 
      [total_income] => 600 
      [time_duration] => 60 
      [level] => 1 
     ) 
    [3] => stdClass Object 
     (
      [id] => 1148 
      [gid] => 4 
      [parent_id] => 1136 
      [username] => test_downline 
      [email] => [email protected] 
      [name] => test_downline 
      [status] => 0 
      [registerd] => 2017-04-21 10:42:56 
      [last_login] => 2017-04-21 11:08:00 
      [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
      [tranjection_password] => 
      [package_id] => 9 
      [user_id] => 1148 
      [purchase_date] => 2017-04-21 10:42:56 
      [confirm_date] => 0000-00-00 00:00:00 
      [package_name] => USD 10000 
      [amount] => 10000 
      [daily_income] => 12 
      [total_income] => 600 
      [time_duration] => 60 
      [level] => 2 
    ) 
    [4] => stdClass Object 
     (
      [id] => 1150 
      [gid] => 4 
      [parent_id] => 1148 
      [username] => test1_downline1 
      [email] => [email protected] 
      [name] => test1_downline1 
      [status] => 0 
      [registerd] => 2017-04-21 11:08:27 
      [last_login] => 0000-00-00 00:00:00 
      [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
      [tranjection_password] => 
      [package_id] => 5 
      [user_id] => 1150 
      [purchase_date] => 2017-04-21 11:08:27 
      [confirm_date] => 0000-00-00 00:00:00 
      [package_name] => USD 500 
      [amount] => 500 
      [daily_income] => 12 
      [total_income] => 600 
      [time_duration] => 60 
      [level] => 3 
     ) 

    [5] => stdClass Object 
     (
       [id] => 1149 
       [gid] => 4 
       [parent_id] => 1136 
       [username] => test_downline2 
       [email] => [email protected] 
       [name] => test_downline2 
       [status] => 0 
       [registerd] => 2017-04-21 11:06:35 
       [last_login] => 0000-00-00 00:00:00 
       [password] => 4eca045dfa240f56a1f9d45eaa53b71c6eccd6a7 
       [tranjection_password] => 
       [package_id] => 6 
       [user_id] => 1149 
       [purchase_date] => 2017-04-21 11:06:35 
       [confirm_date] => 0000-00-00 00:00:00 
       [package_name] => USD 1000 
       [amount] => 1000 
       [daily_income] => 12 
       [total_income] => 600 
       [time_duration] => 60 
       [level] => 2 
      ) 

は、あなたが何かを必要とする場合、私に教えてください2

public function array_flatten($array, $i = 0) { 
    $flat = array(); 

    foreach ($array as $value) { 
     if (isset($value->data) && is_array($value->data)) { 
      $flat = array_merge($flat, $this->array_flatten($value->data)); 
     } else { 
      $flat[] = $value; 
     } 
    } 
    return $flat; 
} 

欲望の出力のために働きます。

+0

期待される結果は何ですか? – hassan

+0

@hassan更新された質問を確認する –

答えて

2

あなたがこの複雑なつや消しを行う必要があり、なぜ私にはわからない、と私はあなたができることをかなり確信している - あなたは、以下の方法が、しかし、あなたは再帰を使用する必要がありますことを、この容易に達成できること - as it's seems that you are fetching data from databaseここで、例えば:

// Sample data 
$arr = [ 
    ['level' => 1, 'data' => [['level' => 2],['level' => 3, 'data' => [['level' => 6]]]]], 
    ['level' => 4], 
    ['level' => 9, 'data' => [['level' => 8]]], 
]; 

function flat($data, &$list = []) 
{ 
    foreach ($data as $key => $value) { 
     if (isset($value['data']) && is_array($value['data'])) { 
      $tmp = $value['data']; 
      unset($value['data']); 
      flat($tmp, $list); 
     } 
     $list[] = $value; 
    } 
    return $list; 
} 

print_r(flat($arr)); 

ライブのサンプル:は、多くの場合、再帰が大きなアレイと、より高価であるhttps://3v4l.org/Rtn5f

PS