1

MYSQL db から、配列内に配置したさまざまな情報をエクスポートします。

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

次に、スクリプトのさらに下で、5 つのチャートについて、2xPROTEIN + 3xCARBOS などの最高の結果を持つ 6 つの製品のうち、最高のカロリーを持つ 3 つの製品の ID を取得する必要があります。

さまざまなテーブルを埋めるために配列をソートするにはどうすればよいですか?

関数 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 に答える