douchibu7040 2017-01-10 10:13
浏览 96
已采纳

合并两个数组:按id排序并删除重复 - PHP

I want to merge two arrays but with 2 constraints:

  • sort by order, according to ID
  • if there are two identical IDs, only display it once (no duplicate)

first array :

{
    "products": {
        "0": {
            "title": "myTitle",
            "url": "xxxxxx",
            "id": "309132"
        },
        "1": {
            "title": "myTitle",
            "url": "",
            "id": "309123",
        },...
     }
}

second array :

{
    "products": {
        "0": {
            "title": "myTitle",
            "url": "xxxxxx",
            "id": "329102"
        },
        "1": {
            "title": "myTitle",
            "url": "",
            "id": "439023",
        },...
     }
}

I tried :

$data3 = array_unique(array_merge($data1,$data2), SORT_NUMERIC);

or with SORT_REGULAR, but I did not achieve my requirements.

  • 写回答

1条回答 默认 最新

  • doumengmian1180 2017-01-10 10:32
    关注

    Your data does not look like an array it is JSON. using same structure of your json in array, you can try this:

    <?php 
    $arr=array(
    "products"=> array(
    "0"=> array(
    "title"=> "myTitle",
    "url"=> "xxxxxx",
    "id"=> "309132"
    ),
    "1"=> array(
    "title"=> "myTitle",
    "url"=> "",
    "id"=> "309123",
    )
    )
    );
    
    
    //similar $arr1['products'] 
    
        function cmp($a, $b)
        {
            if ($a["id"] == $b["id"]) {
                return 0;
            }
            return ($a["id"] < $b["id"]) ? -1 : 1;//sorts in decending order by ratings..
        }
        $array['products']=array_merge($arr['products'],$arr1['products']);
        usort($array['products'],"cmp");
        $array['products'] = array_values(array_map("unserialize", array_unique(array_map("serialize", $array['products']))));
        echo '<pre>';
        print_r($array);
    

    DEMO HERE

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建