【问题标题】:how to count the number of items in a php associative array如何计算php关联数组中的项目数
【发布时间】:2026-01-17 01:45:02
【问题描述】:

我有一个数组如下。

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

怎么做?

【问题讨论】:

  • 既然有ID,你应该用它们来统计物品,标签可能会改变,而ID应该保持不变。

标签: php multidimensional-array


【解决方案1】:
$count = 0;
foreach ($array as $key=>$value) {
    if ($value ['item'] == 'Banana Cream Cheesecake') {
        $count++;
    }
}
echo $count;

【讨论】:

  • 我希望更多的可重用性,他实际上想要一个总数而不是只知道有多少特定甜点?
  • 这个答案比array_count_values() 工作得更快我的代码使用这样的东西8次。总共花费 0.22 毫秒。然后我改为使用 array_count_values() 一次,这个函数只花费 0.39 毫秒。
【解决方案2】:
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'];
    

    【讨论】:

      【解决方案4】:

      print_r 数组并计算你的芝士蛋糕出现的次数。

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

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

      【讨论】:

      • 谢谢!答案和问题的条件,我想我在其他情况下可能会做不同的自己......
      • 您是否根据需要更改了里面的字符串/数组?
      • @Navdeep 你应该这样做print_r($array, true) 所以它返回字符串并且不写入标准输出
      【解决方案5】:

      扩展@steve 的answer

      $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 循环 - 而是有一个数组,其中包含该特定键的所有值的总计。

      【讨论】:

        【解决方案6】:

        在处理数字而不是字符串时遇到问题,因为 substr_count 也需要键,所以我只使用纯计数而不是 substr_count 并且工作正常。

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

        【讨论】:

          【解决方案7】:

          今天更简单了。

          这是你的数组:

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

          Demo Here

          干杯! :)

          【讨论】: