2017-05-30 6 views
2

私は自分のアプリケーションでフォルダコンセプトを作成しようとしています。
APiのjson形式でo/pを返そうとしました。 私は、フォルダ、サブフォルダとサブフォルダ内のファイルを一覧表示しようとしていますが、私はこのYII2の多次元配列

{ 
    "success_msg": 1, 
    "message": "success", 
    "details": [ 
    { 
     "foldername": "Test_folder_1", 
     "subfolder": [ 
     { 
      "sub_folder_name": "Test_sub_folder_1", 

     "subfile": [ 
     { 
      "filename": "test_1.pdf" 
     }, 
     { 
      "filename": "test_2.pdf" 
     } 
     ] 
     }, 
     { 
      "sub_folder_name": "test_folder", 
"subfile": [ 
     { 
      "filename": "test_3.jpg" 
     } 
     ] 
     } 
     ] 
    } 
    ] 
} 

のようなネストされた配列にしようとしたとき、私は間違ったO/p.Let私は

ことをあなたと共有取得しています
{ 
    "success_msg": 1, 
    "message": "success", 
    "details": [ 
    { 
     "foldername": "Test_folder_1", 
     "subfolder": [ 
     { 
      "sub_folder_name": "Test_sub_folder_1" 
     }, 
     { 
      "sub_folder_name": "test_folder" 
     } 
     ], 
     "subfile": [ 
     { 
      "filename": "test_1.pdf" 
     }, 
     { 
      "filename": "test_2.pdf" 
     }, 
     { 
      "filename": "test_3.jpg" 
     } 
     ] 
    }, 
    { 
     "foldername": "sample_folder", 
     "subfolder": [], 
     "subfile": [] 
    } 
    ] 
} 

そして、これは...誰もが私はサブフォルダ配列にサブファイル配列を挿入することができる方法を教えてもらえますadvancの中
感謝

public function actionFiles() { 
    ob_start(); 
    $raw = file_get_contents("php://input"); 
    $obj = json_decode($raw); 
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
    if ($obj!=null){ 
     $user_id   = $obj->cur_user_id; 
     $user_model   = User::find()->where(['id'=>$user_id])->one(); 
     $developer_id  = $user_model->createdby; 
     $folder_model  = Folder::find()->where(['developerid'=>$developer_id,'foldertype'=>'parent'])->all(); 
     $count_folder  = count($folder_model); 
     if($count_folder > '0'){ 
      $response = ['success_msg' => 1, 'message' => 'success', 'details' => []]; 
      foreach($folder_model as $folder) { 
       $folder_id       = $folder['id']; 
       $userdet['foldername']    = $folder['foldername']; 
       $sub = []; 
       $sub_files = []; 
      $subfolder_model = Folder::find()->where(['folderid'=>$folder_id])->all(); 
      foreach ($subfolder_model as $subfolder) { 
       $sub_folder_id    = $subfolder['id']; 
       $sub_name['sub_folder_name'] = $subfolder['foldername']; 
      $sub_file = Files::find()->where(['folderid'=>$folder_id,'subfolderid'=>$sub_folder_id])->all(); 
      foreach ($sub_file as $file) { 
       $filename['filename'] = $file['filename']; 
       array_push($sub_files, $filename); 
      } 
       array_push($sub, $sub_name);     
       // echo '<pre>';print_r($userdet); 
      } 

       $userdet['subfolder'] = $sub;    
       $userdet['subfile'] = $sub_files; 
       array_push($response['details'], $userdet); 

      } 
      echo json_encode($response); 
     }else { 
       // failed to insert row 
      $response["success_msg"] = 2; 
      $response["message"] = "No News found"; 
      echo json_encode($response); 
     } 

    } else { 
     $response["success_msg"] = 3; 
     $response["message"] = "Data missing"; 
     echo json_encode($response); 
    } 
} 

自分の行動でありますe ..

答えて

0

ifフォルダが存在する状態を更新しました。あなたのコードを更新して確認してください。

if($count_folder > '0'){ 
    $response = ['success_msg' => 1, 'message' => 'success', 'details' => []]; 

    $folder_tree = []; 
    foreach($folder_model as $folder) { 
     $folder_id       = $folder['id']; 

     $sub = []; 
     $subfolder_model = Folder::find()->where(['folderid'=>$folder_id])->all(); 
     foreach ($subfolder_model as $subfolder) { 
      $sub_folder_id    = $subfolder['id']; 

      $sub_files = []; 
      $sub_file = Files::find()->where(['folderid'=>$folder_id,'subfolderid'=>$sub_folder_id])->all(); 
      foreach ($sub_file as $file) { 
       array_push($sub_files, array('filename'=> $file['filename'])); 
      } 
      array_push($sub, array('sub_folder_name'=> $subfolder['foldername'], 'subfile'=> $sub_files));     
     } 

     array($folder_tree, array('foldername'=> $folder['foldername'], 'subfolder'=> $sub)); 
    } 
    $response['details'] = $folder_tree; 

    echo json_encode($response); 
} 

注: - テストしていないので、システムをチェックしてください。

+0

ありがとうございます。私の解決策を理解しました。私はそれを分かち合いましょう –

0

配列の位置をいくつか変更してコードを更新しました。

if ($count_folder > '0') { 
       $response = ['success_msg' => 1, 'message' => 'success', 'details' => []]; 
       foreach ($folder_model as $folder) { 
        $folder_id    = $folder['id']; 
        $userdet['foldername'] = $folder['foldername']; 
        $sub     = []; 
        $subfolder_model  = Folder::find()->where(['folderid' => $folder_id])->all(); 
        foreach ($subfolder_model as $subfolder) { 
        $sub_files    = []; 
         $sub_folder_id     = $subfolder['id']; 
         $sub_name['sub_folder_name'] = $subfolder['foldername']; 
         $sub_file = Files::find()->where(['folderid' => $folder_id, 'subfolderid' => $sub_folder_id])->all(); 
          echo '<pre>';print_r($sub_file); 

         foreach ($sub_file as $file) { 
          $filename['filename']  = Yii::$app->urlManager->createAbsoluteUrl('uploads/' . $file['filename']); 
          array_push($sub_files, $filename); 
         } 
         $sub_name['subfile']   = $sub_files; 
         array_push($sub, $sub_name); 
        } 

        $userdet['subfolder'] = $sub; 
        array_push($response['details'], $userdet); 
       } 
       echo json_encode($response);