1

我从 MYSQL db 中导出了放入数组中的不同信息:

$info=array(
(ID,CALORIES,PROTEIN,CARBOS,FIBER),
...
);
ex: (1,270,24,12,5),(2,280,2,42,10),...

然后,在脚本的下方,我需要获取 3 个卡路里最高的产品的 ID,以及 2xPROTEIN+3xCARBOS 等结果最高的 6 个产品的 ID,以获取 5 个图表。

如何对数组进行这种排序以填充不同的表?

函数 sort() 似乎只适用于单维数组(如果它适用于我的情况,我不知道语法是什么)。它似乎也不适用于我更高级的排序(2 * x + 3 * y)......

4

4 回答 4

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
于 2012-05-04T22:25:43.473 回答
1

您可以使用array_multisort()对多维数组进行排序。语法允许相当多的灵活性,请参阅参考

于 2012-05-04T22:21:31.423 回答
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');
于 2012-05-04T22:27:35.790 回答
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");
于 2012-05-04T22:28:01.543 回答