2017-11-07 2 views
4

Ich bin neu in PHP MySql und eine Menge Antwort in dieser Frage, aber ich habe immer noch einen Fehler in diesem. Also versuche ich, mein Array zu loopen und ein multidimensionales assoziatives Array zu erstellen. die die ID der Kategorie, Unterkategorie, Segment- und Frage TabellenErstellen multidimensionalen assoziativen Array in PHP mysql

Und in der Kategorie

Ich habe evaluation_details, Kategorie, Segment und Frage Tabellen In evaluation_details, ich habe ich habe Spalte is_cat und sein Datentyp ist winzig int Der Wert ist entweder 0 oder 1, was 1 bedeutet, wenn die angegebene Kategorie die Hauptkategorie ist, und 0, wenn es sich um eine Unterkategorie handelt. Daher muss ich ein solches Array erstellen.

Innerhalb der Kategorie eine mehrere Unterkategorien und jede Unterkategorie hat eine Frage. Und jede Kategorie kann nach Segmenten gruppieren.

array:2 [ 
    0 => array:4 [ 
    "id" => 2 
    "title" => "second evaluation form" 
    "emp_position" => "System Architecture" 
    "first_segment_name" => array:2 [ 
     0 => { 
     +"category_name" => array 2 [ 
      0 => { 
       +"subcategory" => sub_1 
       +"question" => question_1 
      }, 

      1 => { 
       +"subcategory" => sub_2 
       +"question" => question_2 
      } 
     ] 
     } 

     1 => { 
     +"category_name" => array 2 [ 
      0 => { 
       +"subcategory" => sub_3 
       +"question" => question_3 
      }, 

      1 => { 
       +"subcategory" => sub_4 
       +"question" => question_4 
      } 
     ] 
     } 

    ] 

    "second_segment_name" => array:2 [ 
     0 => { 
     +"category_name" => array 3 [ 
      0 => { 
       +"subcategory" => sub_5 
       +"question" => question_5 
      }, 

      1 => { 
       +"subcategory" => sub_6 
       +"question" => question_6 
      } 

      2 => { 
       +"subcategory" => sub_7 
       +"question" => question_7 
      } 
     ] 
     } 

    ] 
    ] 

] 

Und das ist, was ich versuche

public function getEvaluation($data){ 

    $query = DB::table(
     DB::raw("(

       SELECT 
       e.id, 
       e.title, 
       p.name position, 
       s.name segment 
       FROM 
       evaluation_details e_d 
       JOIN evaluation e ON e_d.evaluation_id = e.id 
       JOIN segment s ON e_d.segment_id = s.id 
       JOIN position p ON e.position_id = p.id 
       WHERE e.position_id = 2 
       ORDER BY segment 

     ) As `a` 
     ") 
    )->get()->toArray(); 

    $query = json_decode(json_encode($query), true); 


    foreach ($query as $index => $data) { 
     $first_array[$index]['id'] = $data['id']; 
     $first_array[$index]['title'] = $data['title']; 
     $first_array[$index]['emp_position'] = $data['position']; 

     $first_array[$index]['segments'] = DB::table('evaluation_details AS e_d') 
      ->select('c.name AS category') 
      ->join('category AS c', 'e_d.category_id', 'c.id') 
      ->join('evaluation As e', 'e_d.evaluation_id', '=', 'e.id') 
      ->join('segment AS s', 'e_d.segment_id', 's.id') 
      ->where('e.position_id', '=', '2') 
      ->get()->toArray(); 

    } 
    echo '<pre>'; 
    dd($first_array);exit; 


} 

* zu tun, aber es gibt mir anderes Ergebnis ich in Kategorie eine andere Anordnung haben müssen *

array:2 [ 
    0 => array:4 [ 
    "id" => 2 
    "title" => "first evaluation form" 
    "emp_position" => "System Architecture" 
    "segments" => array:2 [ 
     0 => {#497 
     +"category": "test" 
     } 
     1 => {#498 
     +"category": "Quality & Dependibility" 
     } 
    ] 
    ] 

] 

I hoffe, dass mir jemand dabei helfen kann.

+0

Also, was ist das Problem Sie konfrontiert sind? –

+0

Ich bin verwirrt. Was ist der Code, den du gepostet hast? Soll das in ein mehrdimensionales Array konvertiert werden? Oder möchten Sie ein multidimensionales Array erstellen? – Bluetree

+0

@MayankPandeyz Ich möchte ein Array wie das –

Antwort

1

Dazu müssen wir den category Schlüssel löschen und den Schlüssel durch category name ersetzen.

Fügen Sie dies am Ende in Ihrer foreach Schleife.

foreach($first_array[$index]['segments'] as $index2 => $segment){ 
    $category_name = $segment['category']; //This will output test and resplace the category key 
    $first_array[$index]['segments'][$index2][$category_name] = DB::Table...;//Perform your subcategory query here just like what you did in segment. 
    unset($first_array[$index]['segments'][$index2]['category']);//Delete the old 
} 

Ändern Sie den Code aus dieser:

foreach ($query as $index => $data) { 
     $first_array[$index]['id'] = $data['id']; 
     $first_array[$index]['title'] = $data['title']; 
     $first_array[$index]['emp_position'] = $data['position']; 

     $first_array[$index]['segments'] = DB::table('evaluation_details AS e_d') 
      ->select('c.name AS category') 
      ->join('category AS c', 'e_d.category_id', 'c.id') 
      ->join('evaluation As e', 'e_d.evaluation_id', '=', 'e.id') 
      ->join('segment AS s', 'e_d.segment_id', 's.id') 
      ->where('e.position_id', '=', '2') 
      ->get()->toArray(); 

    } 

Um dies zu

foreach ($query as $index => $data) { 
    $first_array[$index]['id'] = $data['id']; 
    $first_array[$index]['title'] = $data['title']; 
    $first_array[$index]['emp_position'] = $data['position']; 

    $first_array[$index]['segments'] = DB::table('evaluation_details AS e_d') 
     ->select('c.name AS category') 
     ->join('category AS c', 'e_d.category_id', 'c.id') 
     ->join('evaluation As e', 'e_d.evaluation_id', '=', 'e.id') 
     ->join('segment AS s', 'e_d.segment_id', 's.id') 
     ->where('e.position_id', '=', '2') 
     ->get()->toArray(); 
    foreach($first_array[$index]['segments'] as $index2 => $segment){ 
     $category_name = $segment['category']; //This will output test and resplace the category key 
     $first_array[$index]['segments'][$index2][$category_name] = DB::Table...;//Perform your subcategory query here just like what you did in segment. 
     unset($first_array[$index]['segments'][$index2]['category']);//Delete the old 
    } 
} 
+0

vielen Dank es funktioniert. Ich schulde dir diese –

+0

Gern geschehen :) Ich bin froh, dass Sie den Fehler behoben haben. – Bluetree

+0

ist, weil du mir geholfen hast :))) –

Verwandte Themen