2016-08-12 6 views
0

私は新しい項目が見つかるたびに配列を満たす再帰的なメソッドを作成しようとしています。再帰的メソッドfill array php laravel

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[] = $ubigeo->name; 
     } 

     $ubigeos[] = getUserUbigeoString($ubigeo->ubigeo_id); 
    } 

    return $ubigeos; 
} 

コードの目的は、ubigeosのすべての名前で配列の塗りつぶしを取得することです。今のよう

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

が、私はリターンの多くの異なる場所に配置しようとしているが、私が得ている最も近い結果だった:

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

========== EDIT =データベースubigeosの=========== 構造:

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

出力は、私はカンマ区切り文字列に崩壊することができるようにような単純な配列であろう。

array:1 [ 
    0 => 'ubigeo1' 
    1 => 'ubigeo2' 
    2 => 'ubigeo3' 
] 
+1

あなたは、例えば、配列と所望の出力を与えることができます。それで、あなたがしたいことをもっと理解できるようになります –

+0

はい、私は例を使って答えを更新します。その値は単純な配列なので、後でコンマで区切られた文字列を得るためにimplodeを使うことができます。 – Carlos

+0

あなたは追加してください入力がどのように構造化されているかの記述?私。それぞれのubigeoが0または1の子Ubigeo参照を持つことができるUbigeoエンティティのチェーンがありますか(ubigo.ubigeo_idはこの子エンティティを定義しています)? – ejuhjav

答えて

1

だから、あなたは実際にUbigeoインスタンスで関数を呼び出すことを前提とし、そのインスタンスと親Ubigeoインスタンス(つまり、最初に結果配列を取得するためにid 55を持つ関数を呼び出す)、あなたはこのようなものを試すことができます(私はあなたの関数呼び出しパラメータを変更したくありませんでした - 通常は、それぞれを新しい関数のインスタンス化再帰ステップ):

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

ありがとう、ちょうど私が必要なもの。そうです、配列をパラメータとして渡す方が良いでしょう。 – Carlos

0

使用し

例laravelにlists方法でそれを行うことができます。

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