2016-08-12 1 views
0

Ich versuche eine rekursive Methode zu erstellen, um ein Array mit jedem gefundenen neuen Element zu füllen.Rekursive Methode fill array php laravel

Das Ziel des Codes ist es, eine Array-Füllung mit allen Namen der Ubigeos zu bekommen.

0 => ubigeo1 
1 => ubigeo2 
2 => ubigeo3 
etc... 

Ab jetzt, ich habe versucht, die Rückkehr vielen verschiedenen Orten platzieren, aber das nächste Ergebnis war ich bekommen haben:

array:1 [▼ 
    0 => array:1 [▼ 
    0 => array:2 [▼ 
     0 => "Port Dusty" 
     1 => [] 
    ] 
    ] 
] 

========== EDIT = =========== Struktur der Datenbank ubigeos:

id name  level ubigeo_id 
---------------------------- 
3 ubigeo1 1  null 
37 ubigeo2 2  3 
55 ubigeo3 3  37 

die Ausgabe würde wie so eine einfache Anordnung sein, die dann könnte ich in eine kommagetrennte Zeichenfolge implodieren:

+1

können Sie geben ein Beispiel-Array und gewünschten Ausgangs. So kann es verständlicher sein, was Sie tun möchten –

+0

ja, ich aktualisiere die Antwort mit einem Beispiel, es ist ein einfaches Array mit den Werten, so kann ich implode später verwenden, um eine Komma getrennte Zeichenfolge zu erhalten, danke – Carlos

+0

Könnten Sie bitte hinzufügen eine Beschreibung, wie die Eingabe strukturiert ist? I.e. Hast du nur eine Kette von Ubigeo Entitäten, wobei jeder Ubigeo 0 oder 1 Bezug auf Kind Ubigeo haben kann (und die Ubigeo.ubigeo_id definiert diese Kind Entität)? – ejuhjav

Antwort

1

also vorausgesetzt, dass Sie dies wirklich mit Funktion mit einer Ubigeo-Instanz aufrufen wollen und nur die Namen von diesen und von den übergeordneten Ubigeo-Instanzen (d. H. Rufen Sie die Funktion mit ID 55 zunächst auf, um das Ergebnisarray zu erhalten), Sie können so etwas versuchen (Ich wollte Ihre Funktionsaufrufparameter nicht ändern - normalerweise würde ich das Array als Funktionsparameter einfügen, anstatt jeweils einen neuen zu instanziieren Rekursionsschritt):

function getUserUbigeoString($ubigeo_id) 
{ 
    $ubigeoRepository = new \App\Repositories\UbigeoRepository(); 
    $ubigeos = array(); 

    $ubigeo = $ubigeoRepository->getUbigeo($ubigeo_id); 

    if(!empty($ubigeo)) 
    { 
     if($ubigeo->ubigeo_id != null) { 
      $ubigeos = getUserUbigeoString($ubigeo->ubigeo_id); 
     } 
     $ubigeos[] = $ubigeo->name; 
    } 

    return $ubigeos; 
} 
+0

Danke, genau was ich brauchte. Du hast recht, es wäre besser, das Array als Parameter zu übergeben. – Carlos

0

Gebrauch kann es tun mit lists Methode in Laravel

Ex:

$ubigeoRepository->lists('ubigeo_id','id')->all();