Controller :
public function leaderboard() {
$users = DB::table('users')
->join('images', 'users.id', '=', 'images.user_id')
->select(DB::raw('users.*, COUNT(*) AS totalUploads'))
->orderby('totalUploads', 'desc')
->groupby('users.id')
->take(50)
->get();
return View::make('leaderboard')->with('users', $users);
}
查看:
<tbody>
<?php $i = 0; $rank = 0; $lastCount = null; ?>
@foreach($users as $user)
<?php $i++; if ($user->totalUploads != $lastCount) { $rank = $i; } else { $rank = null; } ?>
<tr>
<td>{{ $rank }}</td>
<td><a href="user/{{ $user->username }}">{{ $user->username }}</a></td>
<td>{{ $user->totalUploads }}</td>
</tr>
<?php $lastCount = $user->totalUploads; ?>
@endforeach
</tbody>
当前输出: (破折号表示 <tr>
)
Rank Name Uploads
-------------------
1 Joe 103
-------------------
2 Dan 99
-------------------
3 Pam 87
-------------------
Kim 87
-------------------
Bob 87
-------------------
6 Mel 60
目标输出: (破折号表示 <tr>
)
Rank Name Uploads
-------------------
1 Joe 103
-------------------
2 Dan 99
-------------------
3 Pam 87
Kim 87
Bob 87
-------------------
6 Mel 60
本质上,我想添加一个 foreach 或某种其他类型的循环,以 <br />
分隔用户。同样<tr>
如果$user->totalUploads
是平局。
最佳答案
编辑:
<tbody>
<?php $i = 0; $rank = 0; $lastCount = null; ?>
@for($i=0; $i<count($users); $i++)
<?php $user = $users[$i];
if ($user->totalUploads != $lastCount) { $rank = $i; } else { $rank = null; }
?>
<tr>
<td>{{ $rank }}</td>
<td>
<a href="user/{{ $user->username }}">{{ $user->username }}</a>
<?php $j=0; ?>
@if(isset($user[$i+1]) && $users[$i+1]->totalUploads == $user->totalUploads)
@for($j=$i+1; $j<count($users)&&$users[$j]->totalUploads == $user->totalUploads; $j++)
<a href="user/{{ $users[$j]->username }}">{{ $users[$j]->username }}</a>
@endfor
@endif
</td>
<td>{{ $user->totalUploads }}
@if($j>0)
@for($k=0; $k<$j-$i; $k++)
{{ $user->totalUploads }}
@endfor
@endif
</td>
</tr>
<?php
$i=$i+$j;
$lastCount = $user->totalUploads; ?>
@endfor
</tbody>
请注意,我没有测试这段代码,尽管这看起来很复杂,但我认为它会起作用
旧版本
你可以尝试这样的事情:
<tbody>
<?php $i = 0; $rank = 0; $lastCount = null; ?>
@foreach($users as $user)
<?php $i++; if ($user->totalUploads != $lastCount) { $rank = $i; } else { $rank = null; } ?>
@if($rank) <tr> @else <br/> @endif
<td>{{ $rank }}</td>
<td><a href="user/{{ $user->username }}">{{ $user->username }}</a></td>
<td>{{ $user->totalUploads }}</td>
@if($rank)</tr> @endif
<?php $lastCount = $user->totalUploads; ?>
@endforeach
</tbody>
本质上是在 foreach 中添加一个 if 条件 Blade 。如果排名没有改变(意味着它在同一“级别”上),则不会输出而是输出
。只有当排名不为空(不在同一级别上)时才会应用结束标记
关于php - 在 foreach 循环中包含 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23099966/