2016-03-30 7 views
0

Obwohl es einfach scheinen mag, habe ich seit Tagen mit diesem Fall zu kämpfen, und ich habe nicht in der Lage, eine Lösung zu finden. Ich erkläre es auf den folgenden Zeilen:PHP - Rekursive Unterkategorien hinzufügen

Was ich habe

Ich habe zwei Arrays bekam: eine mit der Reihenfolge der Kategorien und ein anderes mit den Werten dieser Kategorien. Etwas wie folgt:

$orders = 
    [ 
     { 
      category: 3 
     }, 
     { 
      category: 8 
     } 
    ]; 

$values = 
    { 
     3: [ 
      { 
       id: 1, 
       value: 'Value 1' 
      }, 
      { 
       id: 2, 
       value: 'Value 2' 
      }, 
      { 
       id: 3, 
       value: 'Value 3' 
      } 
     ], 
     8: [ 
      { 
       id: 6, 
       value: 'Value 6' 
      }, 
      { 
       id: 7, 
       value: 'Value 7' 
      } 
     ] 
    }; 

Wie Sie sehen können, gibt es zwei Kategorien aber sie können mehr sein (in der Tat bis zu 10 von ihnen).

EDIT

Die Beziehung zwischen result und den anderen Variablen ist, dass, wie Sie sehen können, Kategorie 3 hat Werte mit id 1, 2 und 3. So, wie die Kategorie 3 der erste in der ist order Array, ich muss jede Kategorie in Kategorie 3 bekommen.

Also, als erklärendes Beispiel sollte Kategorie 3.1 (sowie 3.2 und 3.3) innerhalb Unterkategorien 8.6 und 8.7 haben.

Was ich

brauchen muss ich machen sie jeden der vorherigen Unterkategorien unter Berücksichtigung der Reihenfolge. Also, da die Reihenfolge die erste Kategorie Nummer 3 und dann die Kategorie Nummer 8 ist, muss jeder Wert der Kategorie 3 innerhalb aller Werte der Kategorie 8 sein (und so weiter, wenn mehr Kategorien hinzugefügt wurden, jeder der Werte der nächsten Kategorie) wäre unter Kategorie Nummer 8).

Also, was ich haben müssen, ist das folgende Ergebnis:

$result = 
    [ 
     { 
      category: {id: 1}, // Category 3 first value 
      subcategories: [ 
       { 
        category: {id: 6} // Category 8 first value 
       }, 
       { 
        category: {id: 7} // Category 8 second value 
       } 
      ] 
     }, 
     { 
      category: {id: 2}, // Category 3 second value 
      subcategories: [ 
       { 
        category: {id: 6} // Category 8 first value 
       }, 
       { 
        category: {id: 7} // Category 8 second value 
       } 
      ] 
     }, 
     { 
      category: {id: 3}, // Category 3 third value 
      subcategories: [ 
       { 
        category: {id: 6} // Category 8 first value 
       }, 
       { 
        category: {id: 7} // Category 8 second value 
       } 
      ] 
     } 
    ] 

Was ich

versucht habe ich nicht alle Ansätze schreiben, die ich versucht habe, aber ich kann nicht scheinen zu finde dafür eine passende Lösung.

Ich habe rekursive Funktionen versucht (und ich denke, es ist der richtige Weg, um dies zu implementieren), aber alles, was ich mitkommen kann, ist ein 'Stack Call überschritten' wie Fehler.

Aclarations

Datenquelle ist offen, so dass es für Änderungen geeignet ist. Ich möchte es jedoch so beibehalten, denn es gibt zukünftige Implikationen für diese Struktur - wenn es notwendig ist, können sie sich auch ändern.

+0

Ich verstehe nicht wirklich das '$ result' Objekt unter dem" Was ich brauche "-Teil. Wie übersetzt sich '$ orders' in' $ result'? Ich sehe dort Kategorie 8 nicht einmal. – Mike

+0

Ich habe die Frage bearbeitet (unter Was ich habe), so ist es klarer. Vielen Dank für Ihre Zeit und Entschuldigung für die Verwirrung. – Unapedra

Antwort

0

Ich denke, ich habe es!

Hier ist der Code verwende ich, dass, zumindest für den Moment arbeitet (und ich kann so viele orders wie ich will hinzufügen):

$result = array(); 
$objtoadd = array(); 

for($i = sizeof($orders)-1; $i >= 0; $i--){ 

    $objtoadd[$i] = array(); 
    $objtoadd[$i]['subcategories'] = array(); 

    $act_gr = $orders[$i]; 
    $obj; 

    foreach($values[$act_gr->category] as $sub){ 

     $obj = array(); 
     $obj['category'] = $sub; 

     if(isset($objtoadd[$i+1]) && sizeof($objtoadd[$i+1]['subcategories']) > 0) $obj['subcategories'] = $objtoadd[$i+1]['subcategories']; 

     $objtoadd[$i]['subcategories'][] = $obj; 

    } 

    if($i === 0 && isset($objtoadd[$i]) && isset($objtoadd[$i]['subcategories'])) $result = $objtoadd[$i]['subcategories']; 

} 

echo json_encode($result); 

Vielen Dank an alle für Ihre Zeit und Antworten, sowie für Ihre Geduld!