PHP数组合并相同idu与day项的type字段实现方案
PHP合并相同idu+day的数组项并整合type字段
原始数组
$originalArray = array( array("idu" => 4830, "day" => "2023-10-21 16:00:00", "type" => 4), array("idu" => 4831, "day" => "2023-10-21 16:00:00", "type" => 4), array("idu" => 4831, "day" => "2023-10-21 16:00:00", "type" => 5), array("idu" => 4920, "day" => "2023-10-21 16:00:00", "type" => 4), array("idu" => 4920, "day" => "2023-10-21 16:00:00", "type" => 5), array("idu" => 4919, "day" => "2023-10-21 16:00:00", "type" => 4), array("idu" => 4918, "day" => "2023-10-21 16:00:00", "type" => 4) );
实现思路
以idu和day的组合作为唯一标识,遍历原始数组时将相同标识的type值收集为数组,最后整理成目标格式。
代码实现
$mergedArray = []; foreach ($originalArray as $item) { // 用idu+分隔符+day拼接成唯一键,避免键冲突 $key = $item['idu'] . '|' . $item['day']; if (isset($mergedArray[$key])) { // 已存在则追加type值到数组 $mergedArray[$key]['type'][] = $item['type']; } else { // 不存在则初始化记录,将单个type转为数组格式 $mergedArray[$key] = [ 'idu' => $item['idu'], 'day' => $item['day'], 'type' => [$item['type']] ]; } } // 移除临时键,重置数组索引为连续数字 $mergedArray = array_values($mergedArray); // 打印结果 echo '<pre>'; print_r($mergedArray); echo '</pre>';
代码说明
- 遍历过程中用
idu和day拼接的字符串作为临时数组的键,确保相同组合的项能被归类到同一组。 - 遇到重复组合时,直接将当前
type追加到对应数组;首次出现则初始化一条新记录,同时把单个type值转为数组。 - 最后通过
array_values()清除临时键,让数组回到常规的数字索引结构。
输出结果示例
Array ( [0] => Array ( [idu] => 4830 [day] => 2023-10-21 16:00:00 [type] => Array ( [0] => 4 ) ) [1] => Array ( [idu] => 4831 [day] => 2023-10-21 16:00:00 [type] => Array ( [0] => 4 [1] => 5 ) ) [2] => Array ( [idu] => 4920 [day] => 2023-10-21 16:00:00 [type] => Array ( [0] => 4 [1] => 5 ) ) [3] => Array ( [idu] => 4919 [day] => 2023-10-21 16:00:00 [type] => Array ( [0] => 4 ) ) [4] => Array ( [idu] => 4918 [day] => 2023-10-21 16:00:00 [type] => Array ( [0] => 4 ) ) )
内容的提问来源于stack exchange,提问作者Prokul
相关产品推荐
相关产品推荐

