0

在产品页面上,我想显示随机选择的 4 个其他产品,但绝不是已经显示的产品。显示的产品 id 是$_product->getId(),所有产品都进入一个$result[]数组,如下所示:

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

$need = array_rand($result, 4);用来获取 4 个随机产品的 id,但它可能包括展示产品的 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 作为结果中的索引,则可以在调用之前从数组$result[]中删除当前产品,如下所示:$resultunset()array_rand()

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

这种方法使您不必使用 in 的值$need来查找$result[]数组中的产品 id,因为 in 的值$need将是您的产品 id。

于 2012-08-22T02:50:22.053 回答
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 回答