获取foreach循环PHP中相同值的计数

时间:2018-02-20 18:13:03

标签: php foreach

我有一组相同列的重复值和同一列的不同值。所以我试着得到一个可以包含所有数据的最终数组。

实际数组:

array:4 [▼
  0 => {#820 ▼
    +"id": 318
    +"asset_id": 11
    +"job_id": 37
    +"asset_name": "Mini Paver"
    +"shift": "AM
  }
  1 => {#819 ▼
    +"id": 319
    +"asset_id": 39
    +"job_id": 37
    +"asset_name": "Road Sweeper"
    +"shift": "AM
  }
  2 => {#701 ▼
    +"id": 320
    +"asset_id": 11
    +"job_id": 37
    +"asset_name": "Mini Paver"
    +"shift": "AM
  }
  3 => {#825 ▼
    +"id": 321
    +"asset_id": 39
    +"job_id": 37
    +"asset_name": "Road Sweeper"
    +"shift": "AM

  }
]

并且通过在下面使用每个循环,我试图从四个中获得一个数组。

 $jobArr = array();
  foreach ($job_data as $data) {

            $jobArr[$data['job_id']]['job_id']       = $data->job_id;
            $jobArr[$data['job_id']]['shift']        = $data->shift;
            $jobArr[$data['job_id']]['asset_name'][] = $data->asset_name;

        }

以上foreach的输出如下

array:1 [▼
  37 => array:8 [▼
    "job_id" => 37
    "shift" => "AM"
    "asset_name" => array:2 [▼
      0 => "Road Sweeper "
      1 => "Mini Paver "
    ]
  ]
]

实际上我需要得到计数,以及有多少资产名称具有相同的名称,如下所示

array:1 [▼
  37 => array:8 [▼
    "job_id" => 37
    "shift" => "AM"
    "asset_name" => array:2 [▼
      0 => "Road Sweeper (2)"
      1 => "Mini Paver (2)"
    ]
  ]
]

如何获得相同asset_name和结果数组的计数,如上所述。请提出任何建议。

1 个答案:

答案 0 :(得分:0)

如图所示构建了您的分组数组后,您可以迭代它并使用array_count_values生成新格式的数组,然后用新数组替换asset_name数组。

foreach ($jobArr as $job_id => $job) {

    // iterate the counted values and build your array with the desired format
    foreach(array_count_values($job['asset_name']) as $asset => $count) {
        $counts[] = "$asset ($count)";
    }

    // replace the old asset_name key with your new counted/formatted array
    $jobArr[$job_id]['asset_name'] = $counts;
}