我从MYSQL db导出了我放在数组中的不同信息:
$info=array(
(ID,CALORIES,PROTEIN,CARBOS,FIBER),
...
);
ex: (1,270,24,12,5),(2,280,2,42,10),...
然后,在脚本的下方,我需要获得3个卡路里最高的产品的ID,5个图表中最高结果为2xPROTEIN + 3xCARBOS等的6个产品的ID。
如何对数组进行这样的排序以填充我的不同表?
函数sort()似乎只适用于单维数组(如果它适用于我的情况,我不知道语法是什么)。它似乎也不适合我更高级的排序(2 * x + 3 * y)......
答案 0 :(得分:3)
即使这不是你要求的,我强烈建议你在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
答案 1 :(得分:1)
您可以使用array_multisort()
对多维数组进行排序。语法允许相当灵活,请参阅the reference。
答案 2 :(得分:1)
您可以使用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');
答案 3 :(得分:1)
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");