2012-08-22 37 views
0

在产品页面上,我想显示其他4种随机选择的产品,但从未显示已经显示的产品。所显示的一个的产品ID为$_product->getId(),所有的产品进​​入一个$result[]数组是这样的:如何从数组中排除数据?

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

我使用$need = array_rand($result, 4);拿到4种随机产品的ID,但它可能包含的ID展出的产品。如何从$need[]阵列中排除$_product->getId()?谢谢。

回答

1

不要将产品的ID,你不希望显示为$result

$currentProductId = $_product->getId(); 
foreach ($collection as $product) { 
    if ($product->getId() != $currentProductId) $result[] = $product->getId(); 
} 
0

只是不把当前的产品ID放在数组中吗?

foreach($collection as $product) { 
    if($product != $_product) $result[] = $product->getId(); 
} 
+0

这应该是一个评论,Konlink。 –

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的范围,但是你比我更了解你的应用。首先挑选你的数字比拉动记录计算便宜得多,然后检查确保它们是唯一的。

当然,如果这是数据库支持的,你可以通过编写一个新的查询来更加优雅地解决它。

0

如果使用产品ID作为结果的指数$result[],您可以从$result阵列unset()使得呼叫array_rand()像这样之前删除当前的产品:

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

这种方法从节省您的必须使用$need中的值在$result[]数组中查找产品ID,因为$need中的值将是您的产品ID。

相关问题