2017-05-12 69 views
1

你好的StackOverflow社區,我與laravel工作,我創造了這個集如何篩選嵌套集合?

$headquarters = collect([ 
     [ 
      'headquarter' => 'Leon', 
      'offers' => [ 
       [ 
        'name' => 'Name1', 
        'slug' => 'Name1' 
       ], [ 
        'name' => 'Name2', 
        'slug' => 'Name2' 
       ] 
      ] 
     ],[ 
      'headquarter' => 'Granada', 
      'offers' => [ 
       [ 
        'name' => 'Name3', 
        'slug' => 'Name3' 
       ],[ 
        'name' => 'Name4', 
        'slug' => 'Name4' 
       ],[ 
        'name' => 'Name5', 
        'slug' => 'Name5' 
       ] 
      ] 
     ] 
    ]); 

我想通過總部及報價蛞蝓,以得到一個報價

現在我想篩選此集合使用過濾器

$offer = $this->headquarters() 
     ->filter(function($hq) use ($headquarter, $slug) { 
      return $hq['headquarter'] == $headquarter && $hq['offers']['slug'] == $slug; 
     }); 

但沒有成功。

感謝您的任何意見

回答

2

你可以在特定的總部都提供此代碼

$this->headquarters()->where('headquarter', 'Leon')[0]['offers'][0]; 

然後,每所有優惠

foreach ($this->headquarters()->where('headquarter', 'Leon')[0]['offers'] as $offer) { 
      print_r($offer); 
     } 

或試試這個代碼

$offer = collect($this->headquarters()->where('headquarter', $headquarter) 
          ->first()['offers']) 
        ->where('slug', $slug)->first(); 
+0

增加了增強代碼 –

+1

謝謝穆罕默德,因爲我需要我單獨提供<或者嘗試這段代碼>它對我有用 – user615274

+0

y r歡迎你能否給我正確的答案plz –

1

您$ HQ [ '報價']是一個數組,你應該訪問爲$ HQ [ '報價'] [0] [ '塞']。

$offer = $this->headquarters() 
     ->filter(function($hq) use ($headquarter, $slug) { 
      return $hq['headquarter'] == $headquarter && in_array($slug, array_column($hq['offers'], 'slug')); 
     }); 
+0

謝謝克里斯爲幫助,但在這種情況下,我需要得到一個單一的報價。如果總部是格拉納達,並且slug是Name3,那麼結果應該是['name'=>'Name3','slug'=>'Name3']。 – user615274