跪求算法大神!!列表中部分元素相同的行如何合并成一行!!

时光瞄 2019-10-31 05:36:32
我的需求是把province,city,area,address,mobile,consiginee这几个字段相同的时候合并成一行,
并且order_sn拼接起来,number累加,price拼接,total_amount累加
其实就是收货人信息完全一致的时候,要合并成一行方便仓库发货
我下面的数据结构中,就希望王俊凯的两条数据能合并成一行
高分求解啊!!
数组结构如下:
[{
"order_sn": "20191031030746713817",
"consignee": "易烊千玺",
"mobile": "15019252840",
"province": "北京",
"city": "北京市",
"area": "朝阳区",
"address": "牛皮",
"number": 30,
"price": 5500,
"total_amount": 165000,
"created_at": "2019-10-31 03:07:46"
}, {
"order_sn": "20191031031248713766",
"consignee": "王俊凯",
"mobile": "18834876789",
"province": "北京",
"city": "北京市",
"area": "朝阳区",
"address": "嘻嘻",
"number": 5,
"price": 5500,
"total_amount": 30250,
"created_at": "2019-10-31 03:12:48"
}, {
"order_sn": "20191031050229713346",
"consignee": "王俊凯",
"mobile": "18834876789",
"province": "北京",
"city": "北京市",
"area": "朝阳区",
"address": "嘻嘻",
"number": 90,
"price": 5500,
"total_amount": 544500,
"created_at": "2019-10-31 05:02:29"
}]

...全文
225 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
乞丐921 2019-10-31
  • 打赏
  • 举报
回复
$data='[{
			"order_sn": "20191031030746713817",
			"consignee": "易烊千玺",
			"mobile": "15019252840",
			"province": "北京",
			"city": "北京市",
			"area": "朝阳区",
			"address": "牛皮",
			"number": 30,
			"price": 5500,
			"total_amount": 165000,
			"created_at": "2019-10-31 03:07:46"
		}, {
			"order_sn": "20191031031248713766",
			"consignee": "王俊凯",
			"mobile": "18834876789",
			"province": "北京",
			"city": "北京市",
			"area": "朝阳区",
			"address": "嘻嘻",
			"number": 5,
			"price": 5500,
			"total_amount": 30250,
			"created_at": "2019-10-31 03:12:48"
		}, {
			"order_sn": "20191031050229713346",
			"consignee": "王俊凯",
			"mobile": "18834876789",
			"province": "北京",
			"city": "北京市",
			"area": "朝阳区",
			"address": "嘻嘻",
			"number": 90,
			"price": 5500,
			"total_amount": 544500,
			"created_at": "2019-10-31 05:02:29"
		}]';
		$data=json_decode($data,true);
		$newData=[];
		foreach($data as $k=>$v){
			$key=md5($v['province'].$v['city'].$v['area'].$v['address'].$v['mobile'].$v['consignee']);
			if(!isset($newData[$key])){
				$newData[$key]=$data[$k];
			}else{
				$newData[$key]['order_sn'].=','.$v['order_sn'];
				$newData[$key]['number']+=$v['number'];
				$newData[$key]['total_amount']+=$v['total_amount'];
				$newData[$key]['price'].=','.$v['price'];
			}
		}
		print_r($newData);
		exit;
时光瞄 2019-10-31
  • 打赏
  • 举报
回复
引用 1 楼 zoumin0323 的回复:
$data='[{
			"order_sn": "20191031030746713817",
			"consignee": "易烊千玺",
			"mobile": "15019252840",
			"province": "北京",
			"city": "北京市",
			"area": "朝阳区",
			"address": "牛皮",
			"number": 30,
			"price": 5500,
			"total_amount": 165000,
			"created_at": "2019-10-31 03:07:46"
		}, {
			"order_sn": "20191031031248713766",
			"consignee": "王俊凯",
			"mobile": "18834876789",
			"province": "北京",
			"city": "北京市",
			"area": "朝阳区",
			"address": "嘻嘻",
			"number": 5,
			"price": 5500,
			"total_amount": 30250,
			"created_at": "2019-10-31 03:12:48"
		}, {
			"order_sn": "20191031050229713346",
			"consignee": "王俊凯",
			"mobile": "18834876789",
			"province": "北京",
			"city": "北京市",
			"area": "朝阳区",
			"address": "嘻嘻",
			"number": 90,
			"price": 5500,
			"total_amount": 544500,
			"created_at": "2019-10-31 05:02:29"
		}]';
		$data=json_decode($data,true);
		$newData=[];
		foreach($data as $k=>$v){
			$key=md5($v['province'].$v['city'].$v['area'].$v['address'].$v['mobile'].$v['consignee']);
			if(!isset($newData[$key])){
				$newData[$key]=$data[$k];
			}else{
				$newData[$key]['order_sn'].=','.$v['order_sn'];
				$newData[$key]['number']+=$v['number'];
				$newData[$key]['total_amount']+=$v['total_amount'];
				$newData[$key]['price'].=','.$v['price'];
			}
		}
		print_r($newData);
		exit;
太感谢兄弟了,解决了我的问题

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧