PHP 二维数组根据相同的值进行合并

例如有一个二维数组 $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

posted @   nemo20  阅读(3318)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用
访客数:AmazingCounters.com
2016/05/17 起统计
点击右上角即可分享
微信分享提示