我从 MYSQL 数据库导出放入数组中的不同信息:
$info = array(
(ID,CALORIES,PROTEIN,CARBOS,FIBER),
...
);
ex: (1,270,24,12,5),(2,280,2,42,10),...
然后,在脚本的更下方,我需要获取 3 个卡路里最高的产品的 ID、6 个结果最高的 2xPROTEIN+3xCARBOS 的产品的 ID,等等,以获得 5 个图表。
我怎样才能对数组进行这样的排序来填充我的不同表格?
函数 sort() 似乎只适用于一维数组(如果它适用于我的情况,我不知道语法是什么)。它似乎也不适用于我更高级的排序(2x+3y)...
即使这不完全是你所要求的,我强烈建议你在 mysql 中准备你的表(使用所有公式进行排序等)。 Mysql的主要工作就是做各种选择和排序,我就把这个工作留给它吧。此外,mysql 中的高级排序比考虑 php 中的算法或函数要容易得多:)
SELECT * FROM `products`
ORDER BY (2*PROTEIN+3*CARBOS) DESC
就这么简单,没有头痛。最后应用 LIMIT 3 以获得前 3 个。更新
SELECT * FROM `products`
您的更高级查询。如果在代码中遇到困难,您可以尝试将其包装为子查询,如下所示:
SELECT * FROM (SELECT * FROM `products` WHERE `type`='fruit' LIMIT 6) a
ORDER BY (2*PROTEIN+3*CARBOS) DESC LIMIT 3
您可以使用
usort
功能:
function cmp( $a, $b )
{
if( $a["calories"] *3+ $a["protein"]*2 == $b["calories"] *3+ $b["protein"]*2){ //do another comparison etc.. ; }
return ($a["calories"] *3+ $a["protein"]*2< $b["calories"] *3+ $b["protein"]*2)) ? -1 : 1;
}
usort($myarray,'cmp');
usort
是你的朋友。
function sort2Protein3Carbo($a, $b)
{
// Assuming protein is the 2nd value in your array and carbo the 3rd.
$resA = 2 * $a[2] + 3 * $a[3];
$resB = 2 * $b[2] + 3 * $b[3];
if ($resA == $resB)
return 0;
return ($resA < $resB) ? -1 : 1;
}
usort($info, "sort2Protein3Carbo");