2012-03-26 24 views
0

Ich bin wie dies einige Probleme mit einer komplexen Array Manipulation, die aussieht:ein mehrdimensionales Array in ein anderes mehrdimensionales Array konvertieren, aber mit einer anderen Struktur

Array 
(
    [0] => Array 
     (
      [checklist_position] => 8 
      [checklist_id] => 2 
      [question_id] => 11 
      [section] => 1 
      [sum_a] => 332611 
      [sum_b] => 566201 
     ) 

    [1] => Array 
     (
      [checklist_position] => 9 
      [checklist_id] => 2 
      [question_id] => 12 
      [section] => 1 
      [sum_a] => 567725 
      [sum_b] => 67301 
     ) 

    [2] => Array 
     (
      [checklist_position] => 10 
      [checklist_id] => 2 
      [question_id] => 13 
      [section] => 1 
      [sum_a] => 20004 
      [sum_b] => 38381 
     ) 

    [3] => Array 
     (
      [checklist_position] => 11 
      [checklist_id] => 2 
      [question_id] => 14 
      [section] => 2 
      [sum_a] => 699144 
      [sum_b] => 139456 
     ) 

    [4] => Array 
     (
      [checklist_position] => 12 
      [checklist_id] => 2 
      [question_id] => 15 
      [section] => 2 
      [sum_a] => 791204 
      [sum_b] => 336133 
     ) 

    [5] => Array 
     (
      [checklist_position] => 13 
      [checklist_id] => 2 
      [question_id] => 16 
      [section] => 2 
      [sum_a] => 447501 
      [sum_b] => 503112 
     ) 

    [6] => Array 
     (
      [checklist_position] => 14 
      [checklist_id] => 2 
      [question_id] => 17 
      [section] => 2 
      [sum_a] => 651332 
      [sum_b] => 803628 
     ) 

) 

es Was ich versuche zu tun ist, zu konvertieren ein Array wie folgt:

Array 
(
    [0] => Array 
     (
      [section] => 1 
      [questions] => Array 
       (
        [0] => Array 
         (
          [checklist_position] => 1 
          [checklist_id] => 1 
          [question_id] => 1 
          [section] => 1 
          [sum_a] => 348659 
          [sum_b] => 273072 
         ) 

        [1] => Array 
         (
          [checklist_position] => 2 
          [checklist_id] => 2 
          [question_id] => 2 
          [section] => 1 
          [sum_a] => 825992 
          [sum_b] => 189190 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [section] => 2 
      [questions] => Array 
       (
        [0] => Array 
         (
          [checklist_position] => 1 
          [checklist_id] => 1 
          [question_id] => 1 
          [section] => 1 
          [sum_a] => 348659 
          [sum_b] => 273072 
         ) 

        [1] => Array 
         (
          [checklist_position] => 2 
          [checklist_id] => 2 
          [question_id] => 2 
          [section] => 1 
          [sum_a] => 825992 
          [sum_b] => 189190 
         ) 

       ) 

     ) 

) 

Das Problem ist, ich weiß nicht, wo ich anfangen soll und jeder Tipp ist sehr geschätzt.

Vielen Dank!

+0

beginnen mit Schleife durch Ihre ursprüngliche Array erwarten, und ein neues Array erstellen. – Josh

+0

Also, was ist das Muster? Slice Array Stücke (jeweils 2 Array) und machen neue Array mit unterschiedlicher Struktur? – safarov

+0

@safarov, ja, ich möchte ein neues Array mit der oben angegebenen Struktur erstellen. – Psyche

Antwort

1

@ Patroklo-Lösung vereinfacht:

$result = array(); 
foreach($array1 as $data){ 
    $section = $data['section']; 
    $result[$section]['section'] = $section; 
    $result[$section]['questions'][] = $data; 
} 

$result = array_values($result); // to re order 

$ array1 ist das Array mit den aktuellen Daten und $ Ergebnis ist das, was Sie

+0

Vielen Dank mrsafraz. Die Ausgabe ist wie erwartet. Habe noch eine Frage. Kann $ Ergebnis bei 0 beginnen? Jetzt beginnt es bei 1. – Psyche

+0

'$ result = array_values ​​($ result);' - Überprüfen Sie die Antwort noch einmal - ich habe es bearbeitet. Grüße. – safrazik

1

Wahrscheinlich werden Sie weniger Probleme haben, die Nummer des Abschnitts in den Tasten der Verwendung von Arrays, wie ($ array1 das erste Array Ihrer Frage ist):

foreach($array1 as $data) 
{ 
    if(!array_key_exists($result[data['section'])) 
    { 
     $result[$data['section']] = array('section' => $data['section']); 
    } 

    $result[$data['section']['questions'][] = $data; 
} 

Haben nicht ausgecheckt, aber es sollte es schaffen.

+0

Ich glaube, du verpasst dort ein paar Klammern. Es ist wahr, dass ich etwas Leistung bekomme, aber es ist nicht wie gewünscht. – Psyche

+0

Oh, also meinst du sowas wie $ array1 = $ original_array [0]? – Psyche

+0

Nein, $ array1 = $ original_array; Sie müssen nur durchschleifen, der einzige Unterschied ist, dass im letzten Array, anstatt mit den Tasten wie -> 0, 1, 2, 3 ... werden sie wie folgt sein: 1, 2 – Patroklo

Verwandte Themen