如何在PHP关联数组中计算项数

6
我有一个以下的数组。
Array
(
[0] => Array
    (
        [item] => Banana Cream Cheesecake
        [item_id] => 3
        [product] => Desserts
    )

[1] => Array
    (
        [item] => Banana Cream Cheesecake
        [item_id] => 3
        [product] => Desserts
    )

[2] => Array
    (
        [item] => Banana Cream Cheesecake
        [item_id] => 3
        [product] => Desserts
    )

[3] => Array
    (
        [item] => Banana Cream Cheesecake
        [item_id] => 3
        [product] => Desserts
    )

[4] => Array
    (
        [item] => Milk
        [item_id] => 2
        [product] => Soda
    )

[5] => Array
    (
        [item] => Banana Cream Cheesecake
        [item_id] => 3
        [product] => Desserts
    )
)

我想打印:

Banana Cream Cheesecake = 5

如何做到这一点?


请参见:https://dev59.com/lXM_5IYBdhLWcg3wlELO - Jon
由于存在ID,您应该使用它们来计算项目,标签可能会更改,而ID应保持不变。 - Michael Laffargue
8个回答

8
$count = 0;
foreach ($array as $key=>$value) {
    if ($value ['item'] == 'Banana Cream Cheesecake') {
        $count++;
    }
}
echo $count;

我希望能够更多地重复使用,他实际上想要一个总数数组,而不仅仅是知道有多少个特定的甜点? - Adam Thornton
1
这个答案比array_count_values()函数更快。我的代码使用类似以下的方式8次,总共花费0.22毫秒。然后我改用array_count_values()函数仅一次,但该函数花费了0.39毫秒。 - vee

5
array_count_values(array_map(function($foo){return $foo['item'];}, $arr));

3

给定一个如下所示的数组:

$arr = array(array('item' => 'Banana Cream Cheesecake',
                   'item_id' => 3,
                   'product' => 'Desserts'),
             array('item' => 'Banana Cream Cheesecake',
                   'item_id' => 3,
                   'product' => 'Desserts'),
             array('item' => 'Banana Cream Cheesecake',
                   'item_id' => 3,
                   'product' => 'Desserts'),
             array('item' => 'Banana Cream Cheesecake',
                   'item_id' => 3,
                   'product' => 'Desserts'),
             array('item' => 'Milk',
                   'item_id' => 2,
                   'product' => 'Soda'),
             array('item' => 'Banana Cream Cheesecake',
                   'item_id' => 3,
                   'product' => 'Desserts'));

您可以使用 array_count_values 函数,并按名称获取计数。
$counted = array_count_values(array_map(function($value){return $value['item'];}, $arr));
echo $counted['Banana Cream Cheesecake'];

或者修改此函数以使用该项的ID:

$counted = array_count_values(array_map(function($value){return $value['item_id'];}, $arr));
// The item_id
echo $counted['3'];

1

打印数组并计算您的芝士蛋糕出现的次数。

不,说真的,没有更多信息这就是一个解决方案;)

$iCount = substr_count(print_r($array, true), "cheese cake");

答案和问题有关,我猜在其他情境下我可能会以不同的方式处理。 - Sebas
你是否按照需要修改了字符串/数组内部的内容? - Sebas
1
@Navdeep 你应该使用 print_r($array, true),这样它会返回字符串而不是写入标准输出。 - Michael Laffargue

1
进一步扩展 @steve 的 答案
$counted = array_count_values(array_map(function($foo){return $foo['item'];}, $arr));

这将为您提供一个数组,其中包含每个值在['item']键中的总数。
例如,以下是您的示例返回的数组:
$counted = Array
(
    ['Banana Cream Cheesecake'] => 5
    ['Milk'] => 1
)

然后,只需要回显该变量即可打印出来:

echo 'Banana Cream Cheesecake = ' . $counted['Banana Cream Cheesecake'];
//prints "Banana Cream Cheesecake = 5"

这里的优势在于您无需为每个需要计数的值运行for循环-相反,您拥有一个包含特定键所有值的总计数的数组。

1
今天更加简单完成这个任务。
这是你的数组:
$products = array (
  0 => array (
    'item' => 'Banana Cream Cheesecake',
    'item_id' => 3,
    'product' => 'Desserts'
  ),
  1 => array (
    'item' => 'Banana Cream Cheesecake',
    'item_id' => 3,
    'product' => 'Desserts'
  ),
  2 => array (
    'item' => 'Banana Cream Cheesecake',
    'item_id' => 3,
    'product' => 'Desserts'
  ),
  3 => array (
    'item' => 'Banana Cream Cheesecake',
    'item_id' => 3,
    'product' => 'Desserts'
  ),
  4 => array (
    'item' => 'Milk',
    'item_id' => 2,
    'product' => 'Soda'
  )
);

计算项目:

$counts = array_count_values(array_column($products, 'item'));

var_dump($counts);

{{链接1:在这里查看演示}}

干杯!:)


0

0

在处理数字而不仅仅是字符串时遇到了问题,因为 substr_count 还会计算键,所以我使用了普通的 count 而不是 substr_count,这样就可以正常工作了。

$icount=count(print_r($_SESSION['id_bra'], true), $bran);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接