简体   繁体   English

如何从最高编号到最低编号(限3个项目)订购此数组?

[英]How to order this array from highest number to lowest number limited for 3 items?

This is my array : 这是我的数组:

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
            )

    )

    )

I want to display this array like this table but order this array from highest number to lowest number limited for 3 names 我想像此表一样显示此数组,但要将此数组从最高编号到最低编号排序(仅限3个名称)

在此处输入图片说明

  1. Display name 显示名称
  2. Display total_kms 显示total_kms
  3. order from highest number to lowest number 从最高编号到最低编号的顺序
  4. Limited for 3 names (table should content top 3 names have the top kilometers ) 仅限3个名称(表格应在前3个名称中包含最远的公里数)

my code for the table 我的表代码

<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>

Get the expected result in a single query like : 在单个查询中获得预期结果,例如:

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

OR 要么

Order your array with arsort($driver_kms) then limit your for loop to 3 elements for ($i = 0; $i < 3; $i++) { ... 使用arsort($driver_kms)命令数组,然后将for循环限制为3个元素for ($i = 0; $i < 3; $i++) { ...

replace 更换

$users = User::select('name as driver_name','id as user_id')->get(); 
foreach   ($users as $value) { 
  $driver_kms[$value->user_id] = DB::select("select users.name,SUM(reservations.meters) as total_kms from reservations left outer join  ers on (reservations.driver_id=users.id) where zone_id = $url_or_id and driver_id = $value->user_id and reservations.meters !='' order by SUM(reservations.meters) DESC limit 3");
 } 
 $driver_kms = call_user_func_array('array_merge', $driver_kms);

with

$driver_kms = DB::select("select users.name, SUM(reservations.meters) as total_kms    
from reservations left outer join users 
on (reservations.driver_id = users.id) 
where zone_id = $url_or_id and reservations.meters !='' 
group by reservations.driver_id
order by SUM(reservations.meters) DESC limit 3");

只需使用http://php.net/manual/en/function.uasort.php使用回调来比较您的数组元素。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM