【问题标题】:Group and count nested arrays PHP对嵌套数组进行分组和计数 PHP
【发布时间】:2013-04-02 13:07:59
【问题描述】:

我有一个按项目类型对不同项目进行分组的数组。我按 category_id 字段对结果进行分组。我想要的是输出是

项目 1 = 3
项目2 = 2

如果我执行 var_dump(),我的数组看起来像这样

array(2) {
  ["item1"]=>
   array(3) {
    [0]=>
    string(1) "3"
    [2]=>
    string(1) "5"
    [4]=>
    string(1) "7"
  }
  ["item2"]=>
  array(2) {
    [1]=>
    string(1) "4"
    [3]=>
    string(1) "6"
  }
}

这是我正在使用的代码:

            $items = Item::where('order_id','=',$payload["orderId"])->get();
            $itemsGrouped = [];
            $count = 0;
            foreach($items as $item){
                $itemsGrouped[$item->category_id][$count] = $item->id;
                $count++;
            }

           foreach($itemsGrouped as $grp){
               echo key($itemsGrouped).'='.count($grp).'<br>';
           };

这就是我目前得到的。计数有效,但 $itemsGrouped 键无效。它是重复的。

item2=3<br>item2=2<br> 

【问题讨论】:

  • +1 简单但很好的问题。

标签: php arrays multidimensional-array


【解决方案1】:

如下修改你的代码

foreach($itemsGrouped as $key => $grp){
     echo $key.'='.count($grp).'<br>';
};

为了使用key()函数,你需要使用next/current函数遍历数组

【讨论】:

    【解决方案2】:
           foreach($itemsGrouped as $key => $grp){
               echo $key.'='.count($grp).'<br>';
           };
    

    key() 函数返回当前元素的键,该键由数组的内部指针定义。显然它总是指向最后一个元素。

    【讨论】:

      【解决方案3】:
       $myarray = "Your array";
      
          $count = array();  // create an empty array
      
          foreach($myarray as $arr) {  
              foreach($arr as $a) {  
                  $key = array_keys($a); 
                  $count[$key[0]]++;
              }
          }
      
          print_r($count);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-18
        • 2018-02-25
        • 2017-05-30
        • 1970-01-01
        相关资源
        最近更新 更多