Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组以不同的方式排序_Php - Fatal编程技术网

PHP数组以不同的方式排序

PHP数组以不同的方式排序,php,Php,我从MYSQL db导出我放在数组中的不同信息: $info=array( (ID,CALORIES,PROTEIN,CARBOS,FIBER), ... ); ex: (1,270,24,12,5),(2,280,2,42,10),... 然后,在接下来的脚本中,我需要获得5张图表中热量最高的3种产品的ID,6种结果最高的产品的ID为2xPROTEIN+3xCARBOS,等等 如何对数组进行排序以填充不同的表 函数sort()似乎只适用于一维数组(如果它适用于我的情况,我不知道语法是什么)。

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

$info=array(
(ID,CALORIES,PROTEIN,CARBOS,FIBER),
...
);
ex: (1,270,24,12,5),(2,280,2,42,10),...
然后,在接下来的脚本中,我需要获得5张图表中热量最高的3种产品的ID,6种结果最高的产品的ID为2xPROTEIN+3xCARBOS,等等

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


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

您可以使用
array\u multisort()
对多维数组进行排序。语法允许相当多的灵活性,请参见。

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

即使这不是您所要求的,我还是强烈建议您在mysql中准备表(使用所有公式进行排序等)。Mysql的主要工作是做各种选择和排序,我会把工作留给它。此外,mysql中的高级排序要比php中的算法或函数简单得多:)

就这么简单,没有头痛。在末尾应用限制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

尽管这并不完全是您想要的,但我强烈建议您在mysql中准备表(使用所有公式进行排序等)。Mysql的主要工作是做各种选择和排序,我会把工作留给它。此外,mysql中的高级排序要比php中的算法或函数简单得多:)

就这么简单,没有头痛。在末尾应用限制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');
函数cmp($a,$b)
{ 
如果($a[“卡路里”]*3+$a[“蛋白质”]*2==b[“卡路里”]*3+$b[“蛋白质”]*2){//再做一次比较等;}
回报($a[“卡路里”]*3+$a[“蛋白质”]*2<$b[“卡路里”]*3+$b[“蛋白质”]*2))?-1:1;
} 
usort($myarray,'cmp');

您可以使用
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');
函数cmp($a,$b)
{ 
如果($a[“卡路里”]*3+$a[“蛋白质”]*2==b[“卡路里”]*3+$b[“蛋白质”]*2){//再做一次比较等;}
回报($a[“卡路里”]*3+$a[“蛋白质”]*2<$b[“卡路里”]*3+$b[“蛋白质”]*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");
函数sort2Protein3Carbo($a,$b)
{
//假设蛋白质是数组中的第二个值,而碳水化合物是第三个值。
$resA=2*$a[2]+3*$a[3];
$resB=2*$b[2]+3*$b[3];
如果($resA==$resB)
返回0;
回报($resA<$resB)?-1:1;
}
usort($info,“sort2Protein3Carbo”);

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");
函数sort2Protein3Carbo($a,$b)
{
//假设蛋白质是数组中的第二个值,而碳水化合物是第三个值。
$resA=2*$a[2]+3*$a[3];
$resB=2*$b[2]+3*$b[3];
如果($resA==$resB)
返回0;
回报($resA<$resB)?-1:1;
}
usort($info,“sort2Protein3Carbo”);

但如果我的数据库包含200多万个条目,我认为从性能角度来看,我最好使用PHP解决方案,你不同意吗?不,因为你可以在特定查询上指定排序,而不是在整个表上指定排序。@Andrius说我使用$result3=mysql\u query($sql3)获得原始结果,你会如何“在特定查询上排序”?这是点-在检索数据之前进行排序,排序应用于查询。例如:我会把它贴在答案中,这样格式就更好了。一秒钟。@AndriusNaruševičius我理解,但我需要5到6种不同的排序方式(使用不同的配方,而不仅仅是按(2*蛋白质+3*碳水化合物)排序)..我的顺序会有什么不同?我需要多次重新查询?但如果我的数据库包含超过200万个条目,我认为从性能角度来看,我最好使用PHP解决方案,你不同意吗?不,因为你可以在特定查询上指定排序,而不是在整个表上指定排序。@Andrius说我使用$result3=mysql\u query获得原始结果($sql3),您将如何“对特定查询进行排序”?这就是问题所在-您在检索数据之前进行排序,然后在查询中应用排序。例如:我将在答案中发布排序,以便更好地格式化。一秒钟。@AndriusNaruševičius我理解,但我需要大约5或6种不同的排序(使用不同的配方,不仅按(2*蛋白质+3*碳水化合物)订购)…我会如何订购不同的产品?我需要多次重新查询?