二维数组去重合并的问题?

file
如图:我想实现如下数组求解:
注释:将group_time时间一样的did合并到一起,求思路
array:10 [▼
0 => array:2 [▼
"group_time" => 1517932800
"did" => array:3[
0=>1074008064,
1=>2147483647
]
],
1 => array:2 [▼
"group_time" => 1517932802
"did" => array:3[
0=>1074008063,
1=>2147483646
]
]
]

chenBJ
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 7

定义一个新的数组,判断group_time有一样的就往他的did压入数据,如弄成下标为对应group_time的数组,如['1517932800'=>['group_time'=>1517932800,'did'=>[1074008064,2147483647]]],然后遍历原数组,找到group_time对应下标did的数组压入数据,最后再将整个数组用array_value下标就是从0开始了。

6年前 评论
$tempArr = array();
foreach ($arr as $value) {
    $tempArr[$value['group_time']][] = $value['did'];
}
$finalArr = array();
foreach ($tempArr as $group_time => $didArr) {
    $finalArr[] = array(
        'group_time' => $group_time,
        'did' => $didArr
    );
}
6年前 评论
Raymond3689
//1.生成示例二维数组
$two_d = array();
$group_time_key = array(1,2,3);
for ($i=0; $i < 10; $i++) {
    $two_d[] = array(
        'group_time'=>$group_time_key[$i % 3],
        'did'=>mt_rand(),
    );
}

//2.合并二维数组
$group_time_key = array();
$combine_arr = array();
foreach (array_values($two_d) as $one_d){
    $combine_arr[$one_d['group_time']]['group_time'] = $one_d['group_time'];
    $combine_arr[$one_d['group_time']]['did'][] = $one_d['did'];
}
6年前 评论
ruke
<?php
$arr = [
    [
        'group_time' => 1517932800,
        'did' => 1
    ],
    [
        'group_time' => 1517932800,
        'did' => 2
    ],
    [
        'group_time' => 1517932801,
        'did' => 3
    ],
    [
        'group_time' => 1517932801,
        'did' => 4
    ],
    [
        'group_time' => 1517932800,
        'did' => 5
    ],
    [
        'group_time' => 1517932806,
        'did' => 6
    ],
];

usort($arr, function ($a, $b) {
    return $a['group_time'] > $b['group_time'] ? 1 : -1;
});
$currentTime = 0;
$ret = [];
foreach ($arr as $k=>$a) {
    if ($a['group_time'] > $currentTime) {
        $currentTime = $a['group_time'];
    }
    if ($a['group_time'] == $currentTime)   {
        $ret[$currentTime]['group_time'] = $currentTime;
        $ret[$currentTime]['did'][] = $a['did'];
    }
}
//$ret
6年前 评论

使用Laravel集合
先使用groupBy分组,然后map循环处理每组数据

$arr = collect($arr)->groupBy('group_time')->map(function ($item, $key){
        return ['did' => $item->pluck('did')->toArray()];
})->toArray();

分组合并后效果

array (
  1517932800 => 
  array (
    'did' => 
    array (
      0 => 1,
      1 => 2,
      2 => 5,
    ),
  ),
  1517932801 => 
  array (
    'did' => 
    array (
      0 => 3,
      1 => 4,
    ),
  ),
  1517932806 => 
  array (
    'did' => 
    array (
      0 => 6,
    ),
  ),
)

原始数据

$arr = [
        [
            'group_time' => 1517932800,
            'did' => 1
        ],
        [
            'group_time' => 1517932800,
            'did' => 2
        ],
        [
            'group_time' => 1517932801,
            'did' => 3
        ],
        [
            'group_time' => 1517932801,
            'did' => 4
        ],
        [
            'group_time' => 1517932800,
            'did' => 5
        ],
        [
            'group_time' => 1517932806,
            'did' => 6
        ],
    ];
6年前 评论
chenBJ

file
返回json哪个时间段下的哪位作者发布了哪些文章,终于搞定了 感谢各位的帮助

代码
$newArray = [];
foreach ($array as $item) {
if (isset($newArray[$item['did'].'_'.date('Y_m_d',$item['grouptime'])])) {
$newArray[$item['did'].'
'.date('Y_m_d',$item['group_time'])]['list'][] = ['article_title'=>$item['article_title'],'introduction_first'=>$item['introduction_first'],'editor_url'=>$item['editor_url'], 'publish_time'=>$item['publish_time']];
} else {
$arrays = [
'article_title'=>$item['article_title'],
'introduction_first'=>$item['introduction_first'],//导言1
'editor_url'=>$item['editor_url'],//编辑上传图片
'publish_time'=>$item['publishtime'],
'aid'=>$item['aid']
];
$newArray[$item['did'].'
'.date('Y_m_d',$item['group_time'])] = ['group_time' => date('Y-m-d',$item['group_time']),'nickname'=>$item['dern_info']['nickname'],'avatar'=>\Config::get('app.image_url') . $item['dern_info']['avatar'] . \Config::get('app.avatar_template_150'),'did'=>$item['did'], 'list' => [$arrays]];
}
}
dd(array_values($newArray));
return $newArray;

6年前 评论
shizhice
<?php
$data = [
    [
        'group_time' => 1517932800,
        'did' => 1
    ],
    [
        'group_time' => 1517932800,
        'did' => 2
    ],
    [
        'group_time' => 1517932801,
        'did' => 3
    ],
    [
        'group_time' => 1517932801,
        'did' => 4
    ],
    [
        'group_time' => 1517932800,
        'did' => 5
    ],
    [
        'group_time' => 1517932806,
        'did' => 6
    ],
];
$tmpArr = [];
foreach($data as $item) {
    $tmpArr[$item["group_time"]] = [
        "group_time" => $item["group_time"],
        "did" => array_merge($tmpArr[$item["group_time"]]["did"] ?? [], (array) $item["did"]),
    ];
}
var_dump(array_values($tmpArr));
6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!