0

商品ページで、ランダムに選択された他の4つの商品を表示したいのですが、すでに表示されている商品は表示しません。表示されたものの製品IDはであり$_product->getId()、すべての製品は次の$result[]ような配列になります。

foreach($collection as $product){
    $result[]=$product->getId();
}

4つのランダムな商品のIDを取得するために使用$need = array_rand($result, 4);していますが、表示されている商品のIDが含まれている可能性があります。アレイ$_product->getId()から除外するにはどうすればよいですか?$need[]ありがとうございました。

4

4 に答える 4

1

表示したくない商品のIDを入れないでください$result

$currentProductId = $_product->getId();
foreach ($collection as $product) {
  if ($product->getId() != $currentProductId) $result[] = $product->getId();
}
于 2012-08-22T02:41:25.207 に答える
0

現在の製品IDを配列に入れないことは許容されますか?

foreach($collection as $product) {
    if( $product != $_product) $result[] = $product->getId();
}
于 2012-08-22T02:40:29.177 に答える
0

次のように、最初にランダムな数字を生成する場合があります。

$rands = array();
while ($monkey == false){
    $banana = rand(0,4);
    if (in_array($banana, $rands) && $banana != $_product->getId()){ $rands[] = $banana; }

    if (sizeOf($rands) == 4){
        $monkey = true;
    }

}

次に、それらを製品グラバーにパイプで通します。明らかに、あなたはrand自分自身の限界を理解する必要があるでしょうが、あなたは私よりもあなたのアプリについてもっと知っています。最初に番号を選択する方が、レコードを取得してから、それらが一意であることを確認するためにチェックするよりも、計算コストがはるかに低くなります。

もちろん、これがデータベースに基づいている場合は、新しいクエリを作成することで、はるかにエレガントに解決できます。

于 2012-08-22T02:42:52.257 に答える
0

結果のインデックスとして製品IDを使用する場合は、次のように呼び出す前に、配列$result[]から現​​在の製品を削除できます。$resultunset()array_rand()

foreach($collection as $product){
    $result[$product->getId()] = $product->getId();
}
unset($result[$_product->getId()]);
$need = array_rand($result, 4);

このアプローチでは、の値が製品IDになるため、配列$need内の製品IDを検索するためにの値を使用する必要がなくなります。$result[]$need

于 2012-08-22T02:50:22.053 に答える