如果值等于,则从数组中删除项目

时间:2018-08-23 21:24:25

标签: php arrays woocommerce orders unset

在Woocommerce订单页面上,我有订单中的项目,我想通过这些项目循环并根据产品ID 排除特定项目。

$order->get_order_number();
$items = $order->get_items();

foreach( $items as $key => $value) :
     $exclude = $value->get_product_id();
     if( in_array($exclude, array('3404') ) {  
        unset($items[$key]);
     }
  }
endforeach;

$new_items = array_values($items);

我认为这会遍历原始数组,删除其$item的{​​{1}},然后重新索引。

我在这里没有运气。有什么想法吗?

已解决->

$product_id == 3404

1 个答案:

答案 0 :(得分:3)

您应该能够做到这一点:

$items = array_filter($order->get_items(), function($item) {
    return $item->get_product_id() != 3404;
});

此操作遍历$items,并像foreach一样将每个值传递给$item。如果array_filter的回调返回true,则该值将保留其他位置。

您甚至可以直接传递$order->get_items(),而无需将项目提取到数组中。

另外,如果您需要按照评论中的要求排除多个,则可以这样做:

$items = array_filter($order->get_items(), function($item) {
    return !in_array($item->get_product_id(), [3404, 6890]);
});