PHP / Laravel Foreach循环 - 仅显示属于同一标题的项目

时间:2017-07-19 12:35:21

标签: php arrays laravel

我有问题以我想要的方式查看某些数据。

以下是数组的示例:

$items =         
       0 => [
               'name' => 'foo'
               'description' => 'bar'
               'url' => 'http://foobar.com'
               'headline' => 'Headline 1' 
            ],
       1 => [
               'name' => 'uni'
               'description' => 'corn'
               'url' => 'http://unicorn.com'
               'headline' => 'Headline 1' 
            ],

       2 => [
               'name' => 'awe'
               'description' => 'some'
               'url' => 'http://awesome.com'
               'headline' => 'Headline 2' 
            ],

并知道我想循环遍历items数组,并希望首先显示标题以及所有具有相同标题的项目。如果某个项目有另一个标题,我想打印出其他标题和属于它的项目。

看起来应该是这样的:

Headline 1 : <--- Items that do have this headline

name = foo
description = bar
url = http://foobar.com

name = uni
description = corn
url = http://unicorn.com

Headline 2 <----- items with a new headline

name = awe
description = some
url = http://awesome.com

我无法做到这一点。有人可以帮助我吗?

我尝试了类似for循环的内容,用下一个标题检查当前标题。

@for ($i = 0; $i <= count($items); $i++)
            <span>{{ $items[$i]['headline'] }}</span>
        @if($items[$i]['headline'] == $items[$i+1]['headline'])
        ..... 
        @ else .....
@endfor

但这个避风港运作良好

感谢您的帮助,抱歉因为我的英语不好!

3 个答案:

答案 0 :(得分:1)

如果您的数组在转换为数组之前是一个集合,则可以使用groupBy()集合方法:

$collection->groupBy('headline');

答案 1 :(得分:1)

将laravel集合与groupby()方法一起使用

$collection = collect($items);

$items= $collection->groupBy('headline');

$items->toArray();

数组将按标题分割

来自Laravel文档https://laravel.com/docs/5.4/collections#method-groupby

答案 2 :(得分:1)

也许这可能会有所帮助。我在核心PHP中编写此代码

$arr = array();
foreach($items as $item) {
  $arr[$item['headline']] = $item;
}

它会返回一个类似

的数组
Array
(
    [Headline 1] => Array
        (
            [name] => uni
            [description] => corn
            [url] => http://unicorn.com
            [headline] => Headline 1
        )

    [Headline 2] => Array
        (
            [name] => awe
            [description] => some
            [url] => http://awesome.com
            [headline] => Headline 2
        )

)