我有一个PHP foreach循环,在每个用户配置文件中显示最低的速率。如何在不更改SQL语句的情况下对foreach循环进行排序以显示从最低到最高速率的配置文件?
$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 ?>
}
答案 0 :(得分:2)
理想的解决方案是在排序结果时使用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>";
答案 1 :(得分:0)
似乎你有不好的数据结构而不是用户和用户费率之间的关系你有一组关系不同的可能的比率
然后你可以使用case来过滤(并规范化)列的集合 并且您可以直接从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
;