-1

可能重复:
如何检查另一个数组php中是否存在数组的任何值?

我正在创建一个购物网站。为简化起见,我有 2 个数组,一个包含我的所有商品,另一个包含添加到购物车的所有商品:

$项目

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [title] => Verity soap caddy
            [price] => 6.00
        )

    [1] => stdClass Object
        (
            [id] => 2
            [title] => Kier 30cm towel rail
            [price] => 14.00
        )
      //a lot more
)

$cartItems

Array
(
    [0] => Array
        (
            [rowid] => c4ca4238a0b923820dcc509a6f75849b
            [id] => 1
            [qty] => 1
            [price] => 6.00
            [name] => Verity soap caddy
            [subtotal] => 6
        )
)

如果商品也在购物车中,我想遍历$cartItems并添加一个类(识别)。这就是我尝试做的方式

foreach($items as $items){
  if($cartItems[$items->id]['id']){
    echo '<h1 class="inCart">'. $item->title . '</h1>' //...
   }else{
    echo '<h1>'. $item->title . '</h1>' //...
   }
}

上面的代码不起作用 - 即使$cartItems[0]['id']会返回我需要的东西。我的想法是,在遍历 $items 时,检查$cartItems数组中是否存在类似的 id。我还尝试在循环中添加$cartItems[$i]['id']和递增$i,但没有奏效。当然,我想要得到的 html 输出是(简化的)

<h1 class="IsOnCart"> Item Title</h1>
<h1> Item Title</h1>
<h1 class="IsOnCart"> Item Title</h1>
<h1> Item Title</h1>

有没有办法实现这个?谢谢

4

2 回答 2

2
$intersection = array_intersect($arr1, $arr2);
if (in_array($value, $intersection)) {
    // both arrays contain $value
}
于 2012-12-29T22:01:35.513 回答
0

You can try

$items = array(
  0 => 
  (object) (array(
     'id' => 1,
     'title' => 'Verity soap caddy',
     'price' => '6.00',
  )),
  1 => 
  (object) (array(
     'id' => 2,
     'title' => 'Kier 30cm towel rail',
     'price' => '14.00',
  )),
);


$cartItems = array(
        0 => array(
                'rowid' => 'c4ca4238a0b923820dcc509a6f75849b',
                'id' => 1,
                'qty' => 1,
                'price' => '6.00',
                'name' => 'Verity soap caddy',
                'subtotal' => 6,
        ),
);

$itemsIncart = array_reduce(array_uintersect($items, $cartItems, function ($a, $b) {
    $a = (array) $a;
    $b = (array) $b;
    return $a['id'] === $b['id'] ? 0 : 1;
}), function ($a, $b) {
    $a[$b->id] = true;
    return $a;
});

foreach ( $items as $item ) {
    if (array_key_exists($item->id, $itemsIncart))
        printf('<h1 class="inCart">%s *</h1>', $item->title);
    else
        printf('<h1>%s</h1>', $item->title);
}

Output

<h1 class="inCart">Verity soap caddy</h1>
<h1>Kier 30cm towel rail</h1>
于 2012-12-29T22:31:03.063 回答