首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将PHP foreach循环从最低到最高排序

将PHP foreach循环从最低到最高排序
EN

Stack Overflow用户
提问于 2018-01-14 01:23:22
回答 2查看 592关注 0票数 0

我有一个PHP foreach循环,它显示每个用户配置文件中可能的最低速率。如何对foreach循环进行排序,以便在不更改SQL语句的情况下从最低速率到最高速率显示配置文件?

代码语言:javascript
复制
$results = DB::query('SELECT users.`id`, rates.`basic`, rates.`standard`, rates.`premium` FROM rates, users WHERE rates.`rate_id` = users.`id`');

foreach($results as $row){
  if($row['basic'] !=""){
     $minrate = $row['basic'];
  }elseif($row['standard'] !=""){
     $minrate = $row['standard'];
  }elseif($row['premium'] !=""){
      $minrate = $row['premium']; 
  }
  <?php echo $minrate ?>
}
EN

回答 2

Stack Overflow用户

发布于 2018-01-14 01:42:34

理想的解决方案是使用SQL对结果进行排序。但是如果由于某种原因,你不能修改SQL代码。您可以:

代码语言:javascript
复制
    $tempArr = array();
    foreach($results as $row){
        if($row['basic'] != ""){
             $minrate = $row['basic'];
        }elseif($row['standard'] !=""){
             $minrate = $row['standard'];
        }elseif($row['premium'] !=""){
              $minrate = $row['premium']; 
        }

        //Make the $minrate the key - Will be easy to sort | Make a multi dimensional array, incase duplicate on $minrate
        if ( !isset( $tempArr[ $minrate ] ) ) $tempArr[ $minrate ] = array();
        $tempArr[ $minrate ][] = $row;
    }

    //Sort an array by key
    ksort( $tempArr );

    //Make Multi dementional array to single array
    $sortedResult = array();
    foreach( $tempArr as $tempArr2 ) {
        foreach( $tempArr2 as $value ) {
            $sortedResult[] = $value;
        }
    }

    //$sortedResult <-- As the variable says, It should be sorted
    echo "<pre>";
    print_r( $sortedResult ) ;
    echo "</pre>";
票数 2
EN

Stack Overflow用户

发布于 2018-01-14 01:49:19

看起来你有错误的数据结构,而不是用户和用户速率之间的关系,你有一个用户之间的关系,一组不同可能速率的列

然后,您可以使用case when for filter (和标准化)列集合

并且您可以直接从SQL中获得排序结果

代码语言:javascript
复制
   SELECT 
    users.id, 
      case when  rates.basic is not null then 0
           when  rates.standard is not null then 1
           when  rates.premium is not null then 2 
          end as my_rate,
      case when  rates.basic is not null then 'BASIC'
           when  rates.standard is not null then  'STANDARD'
           when  rates.premium is not null then  'PREMIUM'
          end as my_rate_text    
      FROM rates, users WHERE rates.`rate_id` = users.`id`
      ORDER BY  my_rate
      ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48242378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档