我有一个数组,它是SQL查询的结果。当我print_r($results)
时,我
Array ( [0] => Array ( [Q1] => 24 ) ) Array ( [0] => Array ( [Q2] => 12 ) ) Array ( [0] => Array ( [Q3] => 14 ) ) Array ( [0] => Array ( [Q4] => 10 ) ) etc.
当我使用foreach ($result as $key=>$value)
循环显示HTML内容时,我得到了
-----------
|Q1 | 24|
|Q2 | 12|
|Q3 | 14|
|Q4 | 10|
-----------
但我想按值对数组进行排序,以便我得到
-----------
|Q4 | 10|
|Q2 | 12|
|Q3 | 14|
|Q1 | 24|
-----------
第二列是计算的结果,而不是实际的DB列,所以我不能在SQL中使用ORDER BY
。这是查询本身:
SELECT (SUM(Q".$i.")) AS Q$i FROM marks
我尝试过排序函数 - arsort($results)
和其他人。我已经尝试重新分配到2D数组 - $final_result[] = $results;
和排序 - 但没有运气。
在尝试访问$ results中的实际值时,是否有一些技巧? (24,12,14等)
答案 0 :(得分:0)
结合使用usort
(用户函数排序),strcmp
(字符串比较)和key
(对于变量键),您可以处理:
$quarters = array(
array(
'Q1' => 24
),
array(
'Q2' => 12
),
array(
'Q3' => 14
),
array(
'Q4' => 10
)
);
usort($quarters, function($a, $b) {
return reset($a) - reset($b);
});
print_r($quarters);
给我们:
Array
(
[0] => Array
(
[Q4] => 10
)
[1] => Array
(
[Q2] => 12
)
[2] => Array
(
[Q3] => 14
)
[3] => Array
(
[Q1] => 24
)
)
答案 1 :(得分:0)
我找到了一种对查询结果进行排序的方法。这是一种解决方法。
问题是我的查询SELECT FLOOR(SUM(Q".$i.")) AS Q$i FROM table
没有产生asort(), usort()
等可以处理的关联数组。
当我输出var_export($results)
时输出:
array ( 0 => array ( 'Q1' => '24', ), )array ( 0 => array ( 'Q2' => '12', ), )array ( 0 => array ( 'Q3' => '14', ), )array ( 0 => array ( 'Q4' => '10', ), )
注意非递增0;这似乎是排序算法无法正常工作的原因。
但是,我 能够在foreach循环中显示查询结果而不会出现问题:
-----------
|Q1 | 24|
|Q2 | 12|
|Q3 | 14|
|Q4 | 10|
-----------
所以我的解决方案是将查询结果重新分配给该循环中的关联数组,如下所示:
foreach ($results as $result)
{
foreach ($result as $key=>$value)
{
$rankings["$key"]="$value";
}
}
}
现在,var_export($rankings)
显示了我期望的数据结构:
array ( 'Q1' => '24', 'Q2' => '12', 'Q3' => '14', 'Q4' => '10', )
这个新的数组 适合排序:
asort($rankings);
-----------
|Q4 | 10|
|Q2 | 12|
|Q3 | 14|
|Q1 | 24|
-----------