前言

其实要实现很简单直接foreach,再根据PHP中数组的特性就可以轻松实现。

步骤

这是源数据的格式

$info = [
[
"gname" => "特别关心" ,
"gid" => 1, "fid" => 2,
"nickname" => "立冬" ,
"avatar" => "http://cache.wangyangyang.vip/avatar_4.gif",
"remark" => "" ,
"desc" => "雪花一片一片的洒落在窗台上,田野间,为大地换上了新装~"
],
[
"gname" => "我的好友",
"gid" => 2,
"fid" => 3,
"nickname" => "立春",
"avatar" => "http://cache.wangyangyang.vip/avatar_3.jpg",
"remark" => "",
"desc" => "我在春天等着你的到来~"
], [
"gname" => "朋友" ,
"gid" => 3,
"fid" => 4,
"nickname" => "立夏" ,
"avatar" => "http://cache.wangyangyang.vip/12222222222222.jpg" ,
"remark" => "" ,
"desc" => "你好啊,夏天!"
], [
"gname" => "同学" ,
"gid" => 4,
"fid" => 5,
"nickname" => "小雨" ,
"avatar" => "http://cache.wangyangyang.vip/avatar_5.jpg" ,
"remark" => "" ,
"desc" => "人间四月芳菲尽,山寺桃花始盛开!"
],
[
"gname" =>"同学" ,
"gid" => 4,
"fid" => 6,
"nickname" => "残雪殇" ,
"avatar" => "http://cache.wangyangyang.vip/12222222222222.jpg" ,
"remark" => "小雪" ,
"desc" => "断桥残雪,三潭映月,君可知为何如此?"
]
]

合并后的数据

将数组中某一个相同的值作为键,然后生成一个新的三维数组

 $list = [];
foreach ($info as $k => $v) {
$list[$v['gid']]['gid'] = $v['gid'];
$list[$v['gid']]['gname'] = $v['gname'];
$list[$v['gid']]['list'][] = $v;
}

得到数据

$list=[
1=>[
"gid"=>1,
"gname"=> "特别关心",
"list"=>[
[
"gname"=>"特别关心",
"gid"=>1,
"fid"=>2,
"nickname"=>"立冬",
"avatar"=>"http://cache.wangyangyang.vip/avatar_4.gif",
"remark"=>"",
"desc"=>"雪花一片一片的洒落在窗台上,田野间,为大地换上了新装~"
]
]
],
2=> [
"gid"=>2,
"gname"=> "我的好友",
"list"=>[
[
"gname"=>"我的好友",
"gid"=>2,
"fid"=>3,
"nickname"=> "立春",
"avatar"=>"http://cache.wangyangyang.vip/avatar_3.jpg",
"remark"=>"",
"desc"=> "我在春天等着你的到来~"
]
]
],
3=>[
"gid"=>3,
"gname"=>"朋友",
"list"=>[
[
"gname"=>"朋友",
"gid"=>3,
"fid"=>4,
"nickname"=> "立夏",
"avatar"=> "http://cache.wangyangyang.vip/12222222222222.jpg",
"remark"=> "",
"desc"=>"你好啊,夏天!"
]
]
],
4=>[
"gid"=>4,
"gname"=>"同学",
"list"=>[
[
"gname"=>"同学",
"gid"=>4,
"fid"=>5,
"nickname"=>"小雨",
"avatar"=>"http://cache.wangyangyang.vip/avatar_5.jpg",
"remark"=> "",
"desc"=>"人间四月芳菲尽,山寺桃花始盛开!"
],
[
"gname"=> "同学",
"gid"=>4,
"fid"=>6,
"nickname"=>"残雪殇",
"avatar"=>"http://cache.wangyangyang.vip/12222222222222.jpg",
"remark"=> "小雪",
"desc"=>"断桥残雪,三潭映月,君可知为何如此?"
]
]
]
]

PHP——数组根据某一键值合并的更多相关文章

  1. php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组

    版权声明:本文为博主原创文章,未经博主允许不得转载. 最近工作中碰到一个问题,用PHP将一个二维数组按照二维数组中的各个项中的某个特定字段值合并成一维数组,如果有重复则将重复的合并成二维数组,生成的二 ...

  2. PHP按值合并数组

    /** * PHP按值合并数组 * */ function my_array_merge(&$array1, &$array2) { $result = Array(); foreac ...

  3. php合并数组并保留键值的方法

    答案:使用 + 连接两个数组,替换array_merge()函数. php合并数组,一般会使用array_merge方法. array_merge — 合并一个或多个数组 array array_me ...

  4. php 按列值合并数据

    /* * PHP按值合并数组 * */ function my_array_merge(&$array1, &$array2) { $result = Array(); foreach ...

  5. 将两个数组相同index的value合并成一个新的value组成一个新的数组

    将两个数组相同index的value合并成一个新的value组成一个新的数组 前提: 这两个数组的长度相同 生成后的新数组长度也相同 返回值都是对象 把rows对象的key和value弄成两个数组, ...

  6. Java数组,去掉重复值、增加、删除数组元素

    import java.util.List; import java.util.ArrayList; import java.util.Set; import java.util.HashSet; p ...

  7. c# 获取数组中最大数的值

    求数组中最大的数的值:1.数组的max函数: class Program { static void Main(string[] args) { ,,,,,,,,,}; int max= GetMax ...

  8. bit-map牛刀小试:数组test[X]的值所有在区间[1, 8000]中, 现要输出test中反复的数。要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB

    先来看看这个题目:数组test[X]的值所有在区间[1, 8000]中. 现要输出test中反复的数.要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB. 好, ...

  9. C++ multimap容器访问同一键值元素的不同方法

    multimap是一种多元map容器,允许一个键对应多个值. 本文介绍了 multimap访问同一键值元素的三种不同方法,详细看下面代码: typedef multimap<string,int ...

随机推荐

  1. 【windows】win10新增用户

    1.打开[计算机管理]

  2. 后端&前端零碎知识点和注意问题

    后端 1. Spring自带的MD5加密工具类 import org.springframework.util.DigestUtils; String md5Password = DigestUtil ...

  3. [转帖]Linux超级用户root口令忘记怎么办?

    Linux超级用户root口令忘记怎么办? 2010-05-10 12:15:00 monkey_d_meng 阅读数 5535  收藏 更多 分类专栏: Linux   版权声明:本文为博主原创文章 ...

  4. 如何使用RedisTemplate访问Redis数据结构之Zset

    Redis的ZSet数据结构 Redis 有序集合和无序集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合 ...

  5. stm32f103c8串口USART1发送多一字节

    用UART写了一段Bootloader代码,遇到了一个很奇怪的现象. 代码如下:简单介绍一下就是先统一配置MCU的IO端口,然后配置串口参数,然后循环发送‘0’和'\r’.16进制是0x30 0x0d ...

  6. 【Go】开发中遇到的坑——持续更新

    关于CGo多语言编译 问题出现在将openCV封装到go语言的时候.在编译时需要设置 CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o xxx mai ...

  7. LOJ2401 JOISC2017 Dragon2 计算几何、线段树

    传送门 先考虑每一个攻击方的龙和被攻击方的龙可以与多少个被攻击方/攻击方的龙匹配. 对于攻击方的龙\(A\)和被攻击方的龙\(B\),在道路为线段\((C,D)\)的情况下,能够与下图位置的所有对应属 ...

  8. vue设置全局变量和修改

    1. 只读的全局变量 对于只读的全局变量,知道的有以下两种使用方式: 1)global.js 模块中定义:其他模块import后再使用即可 1.1)定义 import Vue from 'vue'; ...

  9. Redis运维利器 -- RedisManager

    Redis作为一个基于内存的可持久化的日志型.Key-Value数据库,以其出色的性能表现以及高可用性在许多公司有着举足轻重的地位.伴随着业务量的增长,redis集群的规模不可避免的需要扩大,此时re ...

  10. 如何定位 golang 进程 hang 死的 bug

    之前在 golang 群里有人问过为什么程序会莫名其妙的 hang 死然后不再响应任何请求.单核 cpu 打满. 这个特征和我们公司的某个系统曾经遇到的情况很相似,内部经过了很长时间的定位分析总结,期 ...