2017-05-12 71 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