0

私は製品を比較することを想定したウェブサイトに取り組んでいます。だから私はこの次の配列に到達しました

Array ( [iPhone 4 8GB Black] => 319 [iPhone 4S] => 449 [iphone 5] => 529 ) 

配列のキーは製品名であり、配列の値は価格です。今、私はこの配列を次のようなステートメントに変換したいと思います

iphone 4 8GBブラックが一番安い!

iPhone 48GB Blackは、iphone 4Sよりも130ポンド(計算:449-319)安い。

iPhone 48GB Blackは、iphone 5よりも210ポンド(計算:529-319)安い。

iPhone 4Sはiphone5より£80(計算:529-449)安いです。

iphone 5は、選択したリストの中で最も高価な製品です。

配列からこれらのステートメントを出力する方法について教えてください。比較の観点から、この配列で何か他のことをするというあなたの提案も素晴らしいでしょう。ありがとうございました。

4

1 に答える 1

1

まず、配列をで並べ替える必要がありますasort(インデックスと値の関連付けを維持し、値で並べ替えるため)。

asort($yourArray);

次に、配列を並べ替えるときに、価格と名前を分離できます。

$names = array_keys($yourArray);
$prices = array_values($yourArray);

この時点で、ラベルと価格を含む2つの数値インデックス付き配列があり、これら2つの配列は同期されています。

最後に、0から配列の長さ(そのうちの1つ、同じサイズ)までループして、プロセスを作成する必要があります。

for($i = 0 ; $i < count($names) ; $i++)
{
    if ($i == 0)
    {
        // First product -> cheapest
        echo "The product " . $names[$i] . " is cheapest";
    }
    else if ($i == (count($names) - 1))
    {
        // Last product, the most expensive
        echo "The product " . $names[$i] . " is the most expensive product of the list";
    }
    else
    {
        // calculate the diff between current product and first product
        $diff = $price[$i] - $price[0];
        echo "The product " . $names[$i] . " is " . $diff . " more expensive than " . $names[0];
    }
}

この例では、最初の製品とすべての比較を行います。

すべての組み合わせが必要な場合は、もう少し複雑です。二重ループを作成する必要があります。

// Hard print the first product
echo "The product " . $names[0] . " is the cheapest";

// Make all possible comparisions
for($j = 0 ; $j < (count($names) - 1) ; $j++)
{
    for($i = ($j+1) ; $i < count($names) ; $i++)
    {
        // calculate the diff between current product and first product
        $diff = $price[$i] - $price[$j];
        echo "The product " . $names[$i] . " is " . $diff . " more expensive than " . $names[$j];
    }
}

// Hard print the last product
echo "The product " . $name[count($names) - 1] . " is the more expensive";
于 2013-03-05T11:26:31.407 に答える