PHP Count количество элементов массива, которые существуют в другом массиве - PullRequest
0 голосов
/ 13 октября 2018

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

Код

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

Ответы [ 4 ]

0 голосов
/ 13 октября 2018

Если я правильно понял, что $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 голосов
/ 13 октября 2018

Примерно так

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

Песочница

Этоможет быть сведено к одной строке, например:

$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.Как только мы получим их, просто подсчитать их с подсчетом.

Песочница

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

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

Нет в корзине

Ура!

0 голосов
/ 13 октября 2018

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

<?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>";
    } 
?>
0 голосов
/ 13 октября 2018

Попробуйте

$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;
...