2016-06-30 8 views
0

Ich habe eine MySQL Tabelle, die wie folgtPHP: Bestücken Array in einer rekursiven Weise

------------------------- 
field | parent_field 
------------------------ 
model | series 
height | series 
height | model 
length | model 
length | height 

Die Tabelle sieht Struktur auf diese Weise ist, so dass jedes Feld mehrere parent_field haben kann.

Ein Benutzer beginnt mit der Auswahl einer Serie, dann muss ich alle Felder erhalten, die geändert werden müssen.

Zum Beispiel, ich brauche einen Tisch zu haben, die

$fields = array(
    'model' => [ 
     'name' => 'model' 
     ], 

     'height' => [ 
     'name' => 'height' 
     ], 

     'length' => [ 
     'name' => 'length' 
     ] 
); 

So enthält, obwohl Länge nicht parent_fieldSerie hat, hatte aber Höhe was wiederum Serie als parent_field.

Meine Logik

private function loadFields($parent) { 
    $children = array(); 
    $children = $this->loadChildren(); 

    foreach($children as $child) { 
     $data[$child->field][] = array(
     'name' => $child->field, 
      . 
      . 
      .   
    ); 
    } 
} 

Die Funktion loadChildren() macht genau das wie folgt ist, hat es eine SELECT DISTINCT und die Kinder des gegebenen Eltern zurückzukehren.

JEDOCH muss ich weiterhin Kinder für die aktuellen Kinder laden.

Ich stecke fest, kann mir jemand in die richtige Richtung zeigen?

+0

Do Sie wissen, wie man Rekursion benutzt? Wenn Sie es nie getan haben, bereiten Sie sich darauf vor, dass Ihr Geist ernsthaft verdreht wird. Innerhalb der 'foreach'-Schleife, nachdem Sie jedes Feld bearbeitet haben, rufen Sie' loadFields ($ this) 'auf. –

+0

Worauf bezieht sich $? loadFields() nimmt als Argument eine Zeichenkette, in diesem Fall, wenn $ child-> Feld – user1709251

+0

Ich denke, es gibt mehr Probleme in Ihrem Code. Sollte die zweite Zeile nicht '$ children = $ parent-> loadChildren()' sein? In dem rekursiven Aufruf wird 'loadfields ($ child)' –

Antwort

0

Sie können es acheive direkt mit SQL-Abfrage GROUP_CONCAT

SELECT field, GROUP_CONCAT(parent_field SEPARATOR ',') as parent_fields 
FROM mytable GROUP BY field 

Parsen der Zeile verwenden, können Sie nur parent_fields auf, und erhalten die Subarray explodieren Sie in mit allen übergeordneten Werte wollen.

Verwandte Themen