我有一个PHP foreach循环,它显示每个用户配置文件中可能的最低速率。如何对foreach循环进行排序,以便在不更改SQL语句的情况下从最低速率到最高速率显示配置文件?
$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 ?>
}发布于 2018-01-14 01:42:34
理想的解决方案是使用SQL对结果进行排序。但是如果由于某种原因,你不能修改SQL代码。您可以:
$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>";发布于 2018-01-14 01:49:19
看起来你有错误的数据结构,而不是用户和用户速率之间的关系,你有一个用户之间的关系,一组不同可能速率的列
然后,您可以使用case when for filter (和标准化)列集合
并且您可以直接从SQL中获得排序结果
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
;https://stackoverflow.com/questions/48242378
复制相似问题