PHP Count количество элементов массива, которые существуют в другом массиве

Я застрял на том, как считать элементы в моем массиве

Код

// 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
}
}

Мне нужно вернуть количество элементов в массиве, которые имеют идентификаторы продуктов, как указано в $deposit_items

2

Решение

Что-то вроде этого

// 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

песочница

Это может быть сжато (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

Столбец Array, берет этот большой многомерный массив и перезапускает один столбец, используя мой (несколько простой) пример:

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

Становится (я добавил 333, только для ударов ногами)

  [4359, 4320, 333]

В основном тот же формат, что и ваш $deposit_items, Как только они совпадают, мы можем использовать массив пересечений, чтобы найти все элементы в массиве 1, которые появляются во втором массиве. В этом случае мы хотим, чтобы вышеуказанные элементы массива, только если они находятся в $deposit_items, Как только у нас есть те, это просто подсчитать их со счетом.

песочница

Просто чтобы проиллюстрировать это дальше

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 ));

Не в депозите

И если вы перевернете массивы с помощью массива diff, вы получите количество депозитных предметов, НЕ находящихся в корзине.

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

Нет в корзине

Ура!

2

Другие решения

Пытаться

$count = 0;

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
$count++;
}
}

// Display
echo 'total number of matched items: ' , $count;
3

Если я правильно понял, что ваш $item_values['product_id'] это сам массив, вы можете попробовать что-то вроде:

$deposit_items = array( '4359', '4336', '4331', '4320' );

foreach ( $cart_object->get_cart() as $cart_items ){

foreach ( $cart_items['product_id'] as $arr_values ){

if ( in_array($arr_values, $deposit_items)){
// Count number of products in Cart that have matching Product ID's
}

}

}
0

Этот парень хочет получить количество товаров в магазине, поэтому это решение.

<?php



global $woocommerce;
$items = $cart_object->cart->get_cart();

foreach($items as $item => $values) {
$_product =  wc_get_product( $values['data']->get_id());
echo "<b>".$_product->get_title().'</b>  <br> Quantity: '.$values['quantity'].'<br>';
$price = get_post_meta($values['product_id'] , '_price', true);
echo "  Price: ".$price."<br>";
}
?>
-1
По вопросам рекламы [email protected]