php - 在 foreach 循环中包含 foreach 循环

标签 php mysql sql laravel

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/

相关文章:

MYSQL Concat 多行并连接多个表

c++ - 将基于 Netbeans 的已编译 C++ 程序作为 CGI 运行,给出权限错误

SQL 查询用于在 SQL Server 中生成类似输出查询相关表的矩阵

java循环执行多个sql查询

php - 多行注释 vs 单行注释

php - 在 HTML 中定位路径

php - 使用 php 在标签内查找名称属性

php - 使用 MySQL 和 PHP 计算总数而不重复

mysql - 在提交事务之前,该事务中使用的表上的查询会发生什么?

MySQL:哈希索引与表连接