PHP使用array_map和array_intersect [duplicate]

fzwojiic  于 2023-03-28  发布在  PHP
关注(0)|答案(1)|浏览(217)

此问题在此处已有答案

removing elements from an array - that DON'T appear in another array in PHP(2个答案)
5天前关闭。
这篇文章是4天前编辑并提交审查的。
我已经有了这些检查购物车中的产品ID的函数,但是我需要使用变量$products_ids来检查添加到表单中的产品ID数组。

**更新2:**这是两个数组的默认var_dump:

$products_ids如下

array (size=2)
  0 => int 111342
  1 => int 111347

$cart_ids

array (size=3)
  'e877cbddd23b3bfa5b77782ba905b32e' => int 111347
  '696d28043ad274014f653ca2d9a64812' => int 111342
  '4363f14c8e54babb17770c2b4980ceed' => int 14535

这是我正在尝试的新代码:

function matched_ids() {

    $cart_ids = array_merge(
        wp_list_pluck(WC()->cart->get_cart_contents(), 'variation_id'),
        wp_list_pluck(WC()->cart->get_cart_contents(), 'product_id')
    );

    $product_ids  = get_option('restricted_product_ids');
    
    $ids          =   array_map('intval', explode( ',',  $product_ids ) );
    
    return array_intersect( $ids, $cart_ids );
    
}

但是当我需要它检查$products_ids数组与$cart_ids数组以找到匹配的id并在前端输出matched_ids()函数以显示matched string的产品id时,它返回Array

qxgroojn

qxgroojn1#

这应该可以了

// Convert comma separated string of ids into an array if integers.
$restricted_product_ids = array_filter( array_map( 'absint', explode( ',', get_option( 'restricted_product_ids' ) ) ) );

// Our output array.
$ids = [];

// Loop through each item in the cart.
foreach( WC()->cart->get_cart() as $cart_item ) {

    // Get the product id.
    $product_id = absint( $cart_item[ 'product_id' ] );

    // Check if the product id is restricted.
    if ( in_array( $product_id, $restricted_product_ids ) ) {

        // Add it to our output array.
        $ids[] = $product_id;
    }
}

// Make array of id's a comma separated string.
$matched_ids = implode( ', ', $ids );

我们获取购物车中的所有商品并循环遍历它们。在循环中,我们可以访问每个商品的产品ID。然后,我们可以使用产品ID检查它是否存在于受限数组中,然后将其推送到输出。

相关问题