首页 > 解决方案 > 如何将此数组从最高数量到最低数量限制为 3 个项目?

问题描述

这是我的数组:

Array
(
[4] => Array
    (
        [0] => stdClass Object
            (
                [name] => fixed
                [total_kms] => 200
            )

    )

[9] => Array
    (
        [0] => stdClass Object
            (
                [name] => Temo
                [total_kms] => 550
            )

    )

[10] => Array
    (
        [0] => stdClass Object
            (
                [name] => mohamed mostafa
                [total_kms] => 1273
            )

    )

[11] => Array
    (
        [0] => stdClass Object
            (
                [name] => ahmed mostafa
                [total_kms] => 1122
            )

    )

    )

我想像这个表一样显示这个数组,但是这个数组从最高数到最低数限制为 3 个名称

在此处输入图像描述

  1. 显示名称
  2. 显示总公里数
  3. 从最高数到最低数的顺序
  4. 仅限于 3 个名称(表格应包含前 3 个名称具有最高公里数)

我的表格代码

<table class="table">
      <h4 class="text-muted">
       Top3 drivers done most kilometers
    </h4>
    <hr>
<tbody>
    <tr>
      <th class="thead-dark">Driver</th>
         for ($i=0; $i < count($driver_kms) ; $i++)
         {
           if ($driver_kms[$i]->name !='')
           {
              <td><?=$driver_kms[$i]->name?></td>
           }
          }
    </tr>

    <tr>
      <th>Kms</th>
         for ($i=0; $i < count($driver_kms) ; $i++)
            {
           if ($driver_kms[$i]->name !='')
           {
              <td><?=$driver_kms[$i]->total_kms?></td>
          }
          }
    </tr>

</tbody>

标签: phparrayssorting

解决方案


在单个查询中获得预期结果,例如:

SELECT U.name, SUM(R.meters) 
FROM users U, reservations R 
WHERE U.id = R.driver_id
ORDER BY SUM(R.meters) DESC
LIMIT 3

或者

订购您的数组,arsort($driver_kms)然后将您的 for 循环限制为 3 个元素for ($i = 0; $i < 3; $i++) { ...


推荐阅读