例如有一个二维数组 $arr:

$arr = array(
array(
'review_id' =>102 ,
'url'=>'a.jpg',
),
array(
'review_id' =>102 ,
'url'=>'b.jpg',
),
array(
'review_id' =>102 ,
'url'=>'c.jpg',
),
array(
'review_id' =>103 ,
'url'=>'aa.jpg',
),
array(
'review_id' =>103 ,
'url'=>'bb.jpg',
),
array(
'review_id' =>104 ,
'url'=>'aaa.jpg',
),
array(
'review_id' =>105 ,
'url'=>null,
),
array(
'review_id' =>106 ,
'url'=>null,
),
);

现在需要把相同 review_id 的数组的 url 进行合并,形成:

Array
(
[0] => Array
(
[review_id] => 102
[url] => Array
(
[0] => a.jpg
[1] => b.jpg
[2] => c.jpg
) ) [1] => Array
(
[review_id] => 103
[url] => Array
(
[0] => aa.jpg
[1] => bb.jpg
) ) [2] => Array
(
[review_id] => 104
[url] => aaa.jpg
) [3] => Array
(
[review_id] => 105
[url] =>
) [4] => Array
(
[review_id] => 106
[url] =>
) )

===

程序:

<?php
$arr = array(
array(
'review_id' =>102 ,
'url'=>'a.jpg',
),
array(
'review_id' =>102 ,
'url'=>'b.jpg',
),
array(
'review_id' =>102 ,
'url'=>'c.jpg',
),
array(
'review_id' =>103 ,
'url'=>'aa.jpg',
),
array(
'review_id' =>103 ,
'url'=>'bb.jpg',
),
array(
'review_id' =>104 ,
'url'=>'aaa.jpg',
),
array(
'review_id' =>105 ,
'url'=>null,
),
array(
'review_id' =>106 ,
'url'=>null,
),
); $res = array();
foreach($arr as $item) {
if(! isset($res[$item['review_id']])){
$res[$item['review_id']] = $item;
}else{
$res[$item['review_id']]['url'] .= ',' . $item['url']; //[url] => a.jpg,b.jpg,c.jpg
}
}
$res = array_values($res);
$a = array();
foreach ($res as $k => $v) {
if($v['url'] != "" && strpos($v['url'],",") !== false){
$a = explode(",", $res[$k]['url']);
$res[$k]['url'] = $a;
}
} echo "<pre>";
print_r($res);
echo "</pre>";

参考资料:http://bbs.csdn.net/topics/390940872

PHP 二维数组根据相同的值进行合并的更多相关文章

  1. PHP如何随机获取一个二维数组中的一个值

    获取一个数组: $awardid_list=pdo_fetchall('select id from '.tablename($this->table_award)); 这是微擎的写法哈,意思就 ...

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

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

  3. php 二维数组按照某value值求出最大值最小值

    //商家的等级信息是一个二维数组,求出最小折扣和最大折扣array(0=>array('levelname'=>'银','dis'=>7.5), 1=>array('level ...

  4. 二维数组按某个键值排序 FOR PHP

    $arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...

  5. PHP中如何对二维数组按某个键值进行排序

    $arr=[     array(         'name'=>'张三',         'age'=>28     ),     array(         'name'=> ...

  6. PHP二维数组按某个键值排序

    $data=Array(    [0] => Array        (            [id] => 2            [user_id] => 14       ...

  7. php 删除二维数组中某个key值

    /** * 根据key删除数组中指定元素 * @param array $arr 数组 * @param string/int $key 键(key) * @return array */ priva ...

  8. PHP按二维数组中的某个值重新排序数组 usort的使用方法

    $arr[0] = ['aa'=>123,'bb'=>'abc']; $arr[1] = ['aa'=>456,'bb'=>'dfe']; usort($arr,ss('aa' ...

  9. php 基础 二维数组以某个重复值累加

    $arr = array( array('id' => 123, 'name' => '张三', 'amount'=>'1'), array('id' => 123, 'nam ...

随机推荐

  1. cf_ducational Codeforces Round 16_D(gcd)

    题意:求R-L区间满足x=a1*k+b1=a2*l+b2的x的个数; 思路:求出最小的满足条件的x0,则ans=(L-x)/(a1/gcd(a1, a2)*a2)+1; 注意剪枝,不然会超时: 代码: ...

  2. 查看CPU是否支持虚拟化

    参考:http://www.cnblogs.com/jankie/archive/2012/07/04/2575695.html 一.Windows平台:使用cpu-Z即可查看. 二.Linux平台: ...

  3. eclipse + Android Studio 集成 Genymotion 模拟器

    Genymotion 官网 -- android 模拟器https://www.genymotion.com 虚拟机下载安装目录C:\Users\xxx\AppData\Local\Genymobil ...

  4. Android 开发 --Unable to resolve target 'android-19'

    Android 开发 --Unable to resolve target 'android-19' http://blog.csdn.net/love_javc_you/article/detail ...

  5. [原]C# Winform 文件编码批量转换工具

    在发布产品程序包时,往往需要对程序文件进行编码检查,写了一个可以批量修改文件编码格式的辅助工具,希望对有同样需求的童鞋有帮助. 1.程序界面: 2.核心代码: /// <summary> ...

  6. [整理]android中几种常见的尺寸

    获取屏幕宽高尺寸的三种代码形式 在Android上,目前我知道的获取屏幕尺寸的方法有三种不同的代码形式 方法1.在Activity中最常见的调用方式 WindowManager windowManag ...

  7. C++的那些事:流与IO类

    1.流的概念 "流"就是"流动",是物质从一处向另一处流动的过程,比如我们能感知到的水流.C++的流是指信息从外部输入设备(如键盘和磁盘)向计算机内部(即内存) ...

  8. [转载]“浅拷贝”与“深拷贝”

    对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=88; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. C++中对象的复制就如同&quo ...

  9. 简单几何(凸包) POJ 2187 Beauty Contest

    题目传送门 题意:求两点的距离平方的最大值 分析:凸包模板题 /************************************************ * Author :Running_T ...

  10. HDU2457 DNA repair(AC自动机+DP)

    题目一串DNA最少需要修改几个基因使其不包含一些致病DNA片段. 这道题应该是AC自动机+DP的入门题了,有POJ2778基础不难写出来. dp[i][j]表示原DNA前i位(在AC自动机上转移i步) ...