PHP 计算另一个数组中存在的数组项数

标签 php arrays woocommerce counting

我对如何计算数组中的项目感到困惑

代码

// Product ID's to Search
$deposit_items = array( '4359', '4336', '4331', '4320' );

// Loop through the Cart Items
foreach ( $cart_object->get_cart() as $item_values ) {

    // Check if the cart contains items with the matching Product ID's
    if( in_array( $item_values['product_id'], $deposit_items )) {
        // Count number of products in Cart that have matching Product ID's 
    }
}

我需要返回数组中具有产品 ID 的项目数,如 $deposit_items

中所列

最佳答案

像这样

// Product ID's to Search
$deposit_items = array( '4359', '4336', '4331', '4320' );
$cart_items = $cart_object->get_cart();
$cart_product_ids = array_column($cart_items, 'product_id');

$count = count(array_intersect($cart_product_ids, $deposit_items ));

例如

// Product ID's to Search
$deposit_items = array( '4359', '4336', '4331', '4320' );
$cart_items = [
    ['product_id' => 4359],
    ['product_id' => 4320]
];
$cart_product_ids = array_column($cart_items, 'product_id');

echo count(array_intersect($cart_product_ids, $deposit_items ));

输出

2

Sandbox

它可以像这样被压缩(Golfed)成一行:

$deposit_items = array( '4359', '4336', '4331', '4320' );
echo count(array_intersect(array_column($cart_object->get_cart(),'product_id'),$deposit_items));

供引用

http://php.net/manual/en/function.array-column.php

http://php.net/manual/en/function.array-intersect.php

数组列,获取那个大的多维数组并返回单个列,使用我的(有点简单)示例:

$cart_items = [
    ['product_id' => 4359],
    ['product_id' => 4320],
    ['product_id' => 333]
];

变成(我加了333,只是为了好玩)

  [4359, 4320, 333]

基本上与您的 $deposit_items 格式相同。一旦它们相同,我们就可以使用数组相交,找到数组 1 中出现在第二个数组中的所有项目。在这种情况下,我们需要上述数组项,前提是它们在 $deposit_items 中。一旦我们有了这些,用 count 来计算它们就是一件简单的事情。

Sandbox

进一步说明

print_r([
    ['product_id' => 4359],
    ['product_id' => 4320],
    ['product_id' => 333]
], 'product_id');

输出

[4359, 4320, 333]

然后

print_r(array_intersect([4359, 4320, 333], ['4359', '4336', '4331', '4320']));

输出

 [4359, 4320]

然后计数非常简单。

其他内容

巧合的是,如果你想做相反的事情,计算不在 $deposit_items 中的项目,你只需将 array_intersect 替换为 array_diff 即可。

 echo count(array_diff(array_column($cart_items, 'product_id'), $deposit_items ));

Not in Deposit Items

如果您使用数组 diff 翻转数组,您将获得不在购物车中的存款项目数。

 echo count(array_diff($deposit_items, array_column($cart_items, 'product_id')));

Not in cart

干杯!

关于PHP 计算另一个数组中存在的数组项数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52791877/

相关文章:

javascript - 通过键名从对象数组中删除重复的对象

php - 如何获取 WooCommerce 运输方式成本和设置?

php - 删除 WooCommerce 可变产品上的重置变体按钮

javascript - 在 map 功能中传递 Prop 不起作用。将其作为 key 传递

wordpress - 如何从wordpress中的用户id数组中获取用户列表

php - Mysql : Cannot connect: invalid setting. 配置中定义的 controluser 连接失败

php - PayPal 捐赠按钮付款后重定向

php - 从 2 个重叠的日期时间范围获取小时数

php - 新用户无法使用面向对象的php在db中注册

PHP array_merge 如果不为空