我目前有一个对象数组,我试图对标题进行排序,例如,目前我有一个像这样的表格输出:
2014年2月1日 14时15分00秒 14时五十〇分00秒
2014年2月1日 14:50:00 15时25分○○秒
2014年2月2日 11时20分○○秒 12:30:00
2014年2月2日 12:30:00 13时05分00秒
2014年2月4日 十七时10分00秒 17点40分00秒
2014年2月4日 17:45:00 18时20分零零秒
但我正在寻找的是这样的东西:
2月1日
2014年2月1日 14时15分00秒 14时五十〇分00秒
2014年2月1日 14:50:00 15时25分○○秒
2月2日
2014年2月2日 11时20分○○秒 12:30:00
2014年2月2日 12:30:00 13时05分00秒
第4次
2014年2月4日 十七时10分00秒 17点40分00秒
2014年2月4日 17:45:00 18时20分零零秒
我正在使用laravel从数据库中检索这些对象,并且数组中的每个对象看起来都像这样:
object(Illuminate\Database\Eloquent\Collection)#922 (1) {
["items":protected]=>
array(228) {
[0]=>
object(Lesson)#695 (20) {
["attributes":protected]=>
array(16) {
["id"]=>
string(4) "7312"
["date"]=>
string(10) "2014-02-01"
["start_time"]=>
string(8) "14:15:00"
["end_time"]=>
string(8) "14:50:00"
}
}
[1]=> etc...
有人知道是否有可能以这种方式组织标题?这是一个我忽略的简单功能吗?
答案 0 :(得分:1)
据我所知,没有简单的功能可以做你想做的事情(一种分组)。假设您按日期排序(或者某些类似的日期在集合中组合在一起),您可以使用如下代码:
// controller action
public function index()
{
// get all dates, ordered by date
$_dates = Date::orderby('date')->get();
$dates = [];
$date = new Collection; // not really required, just feels nicer
$curDate = false;
foreach ($_dates as $_date) {
// if we have a new date, store current collection in master array,
// re-instantiate a blank collection, and set the current date
if ($_date->date != $curDate) {
if ($curDate !== false) {
$dates[$curDate] = $date;
}
$date = new Collection;
$curDate = $_date->date;
}
$date->push($_date);
}
return View::make('index', compact('dates'));
}
// view
@foreach ($dates as $date => $items)
<h3>{{{ $date }}}</h3>
<ul>
@foreach ($items as $item)
<li>{{{ $item->date }}} {{{ join(' ', $item->times) }}}</li>
@endforeach
</ul>
@endforeach
显然你可以将这个分组逻辑提取到辅助函数(并使变量名多减少混乱!)
答案 1 :(得分:0)
好的是 - 从数据库中获取对象,遍历并将其注入视图,如下所示:
@foreach($collection as $object)
<ul>
{{$date}}//or fetch date also
<li>{{$object[0]["record"]}}</li>
</ul>
@enforeach
@foreach($collection as $object)
<ul>
{{$date}}//or fetch date also
<li>{{$object[1]["record"]}}</li>
</ul>
@enforeach
对于beeing generic,很抱歉,但是collection和object将是你的集合和对象名称/索引。