如何在PHP中排除数组中的项

时间:2015-08-19 03:00:19

标签: php

我创建了一个小的php文件,该文件将显示我想在每个产品页面上显示的“客户已购买”的产品列表。但是,我想在产品页面上排除显示为“也已购买”的相同产品。

这是我创建的php文件,它在页面加载时加载随机产品:

 set.seed(1)
 x <- rnorm(n=100, mean=0, sd=1)

以下是我在主要产品页面中使用的代码:

THIS FILE IS CALLED "**products.php**"
<?php

// Customers also bought

$product1 = '<a href="../images/image1.jpg" class="zoom">
                <img src="../images/image1.jpg" alt="gallery-image" title="gallery-image" class="img-responsive" /></a>
                <div class="item-hover"><a href="../product1.php">Product 1</a> </div>';

$product2 = '<a href="../images/image2.jpg" class="zoom">
                <img src="../images/image2.jpg" alt="gallery-image" title="gallery-image" class="img-responsive" /></a>
                <div class="item-hover"><a href="../product2.php">Product 2</a> </div>';

$product3 = '<a href="../images/image3.jpg" class="zoom">
                <img src="../images/image3.jpg" alt="gallery-image" title="gallery-image" class="img-responsive" /></a>
                <div class="item-hover"><a href="../product3.php">Product 3</a> </div>';

$product4 = '<a href="../images/image4.jpg" class="zoom">
                <img src="../images/image4.jpg" alt="gallery-image" title="gallery-image" class="img-responsive" /></a>
                <div class="item-hover"><a href="../product4.php">Product 4</a> </div>';

$product5 = '<a href="../images/image1.jpg" class="zoom">
                <img src="../images/image5.jpg" alt="gallery-image" title="gallery-image" class="img-responsive" /></a>
                <div class="item-hover"><a href="../product5.php">Product 5</a> </div>';

   $products = array($product1, $product2, $product3, $product4, $product5);

shuffle($products);

?>

5 个答案:

答案 0 :(得分:1)

尝试in_array()或array_key_exists();

$products= [1,2,3,4,5]; 
$array=[1,5];
foreach($products as $key => $product){
    if (array_key_exists($key,$array)){
        unset($products[$key]);
    }
}

这应该可以解决问题,     //循环遍历新数组以创建html

$html = '';
foreach($products as $key => $product){
   $html .= '<a href="'.$product['id'].'">$product['name']  </a>';
}
echo $html;

答案 1 :(得分:1)

使用unset()删除数组中的项目。但是你必须为数组提供一个键和值。

$p["p1"]="abc";
$p["p2"]="efg";

然后,

unset($p["p1"]);

答案 2 :(得分:1)

$array = array("a","b","c","d","e");
$array2 = array("d","b");
shuffle($array);
for($i=0;$i<count($array2);$i++) {
    if(stristr($array[0],$array2[$i])) {
        unset($array[0]);
    }
}

echo $array[0];

答案 3 :(得分:0)

您应该将当前产品存储在某处,因此您只需要将该值与$ products数组中的值进行比较。您可以使用in_array在$ products数组中查找$ current_product。如下所示:

$current_product = '1';
$products = array('1', '2', '3', '4');

if (in_array($current_product, $products)) {
  unset($products['key'])
}

您可以使用unset()从数组中删除值,但请确保在执行此操作时提供数组键或索引值。

<强>更新

与OP谈话后:

我认为您需要重新构建代码。如果您可以在products.php中重构HTML,则将所有产品(包括主产品)存储在php变量中。然后,使用php变量将主要产品和其他产品打印到页面。类似的东西:

<!-- Main Product Code -->
<?php print $main_product ?>

<!-- Customers Also Bought -->
<?php print $products[0] ?>

这样,您的所有数据都存储在PHP变量中。如果它全部存储在变量中,那么您可以使用PHP将两种产品与上述方法进行比较。

但是,如果您无法更改products.php,那么您将需要解析HTML并找到一些标识信息,以指示正在显示哪个产品。确定产品后,您需要将其与存储在$ products中的HTML进行比较以找到匹配项。基本上,你需要将一个字符串与另一个字符串进行比较,而你真的不希望必须沿着这条路线前进。

答案 4 :(得分:0)

好的,在阅读并尝试实施所有提供的建议但没有成功之后,我想出了一个适合我的解决方案。我意识到这是一种更粗暴的做法,但这是我能够实现我所需要的唯一方式。

我修改了包含所有产品名称和html的php文件,以便在主要产品页面上回显。

$all_products = array($product1, $product2, $product3, $product4, $product5); // for all non-promoted products pages
$for_product5 = array($product1, $product2, $product3, $product4); // for Product 5 page
$for_product4 = array($product1, $product2, $product3, $product5); // for Product 4 page
$for_product3 = array($product1, $product2, $product4, $product5); // for Product 3 page
$for_product2 = array($product1, $product3, $product4, $product5); // for Product 2 page
$for_product1 = array($product2, $product3, $product4, $product5); // for Product 1 page

shuffle($all_products);
shuffle($for_product1);
shuffle($for_product2);
shuffle($for_product3);
shuffle($for_product4);
shuffle($for_product5);

这样我就可以在每个页面上回显我想要在该页面上随机显示的项目。

是的,我知道可能有更好的方法可以做到这一点但这让我现在开始了。

感谢您提供的所有帮助。

相关问题