关于处理数组的问题

现在有很多类似这样的数组

{"content":{"productId":112640,"name":"H阿孔特牌小农庄巧克力味威化饼干480g","images":["1.jpg","2.jpg","3.jpg"],"price":"33.50","brandId":5280,"brandName":"阿孔特","cateId":689,"cateName":"进口饼干","cateIdLevel2":686,"cateNameLevel2":"进口食品","cateIdLevel1":685,"cateNameLevel1":"进口商品"}}

其中
cateIdLevel1为一级分类ID 对应名称cateNameLevel1
cateIdLevel2为二级分类ID 对应名称cateNameLevel2
cateId为三级分类 对应名称cateName

现在想实现的最终数组是
一级分类下是二级分类 二级分类下是三级分类 三级分类中 是这些商品。

因为数据量比较大,如何用计算量最少的方式实现?

阅读 1.6k
2 个回答

用一个对象已 id 为键值 保存对应数据, 两次循环搞定

$str = '[{"content":{"productId":112640,"name":"H阿孔特牌小农庄巧克力味威化饼干480g","images":["1.jpg","2.jpg","3.jpg"],"price":"33.50","brandId":5280,"brandName":"阿孔特","cateId":689,"cateName":"进口饼干","cateIdLevel2":686,"cateNameLevel2":"进口食品","cateIdLevel1":685,"cateNameLevel1":"进口商品"}},{"content":{"productId":112641,"name":"22222222222","images":["1.jpg","2.jpg","3.jpg"],"price":"33.50","brandId":5280,"brandName":"阿孔特","cateId":689,"cateName":"进口饼干","cateIdLevel2":686,"cateNameLevel2":"进口食品","cateIdLevel1":685,"cateNameLevel1":"进口商品"}},{"content":{"productId":112642,"name":"333333333","images":["1.jpg","2.jpg","3.jpg"],"price":"33.50","brandId":5280,"brandName":"阿孔特","cateId":689,"cateName":"进口饼干","cateIdLevel2":686,"cateNameLevel2":"进口食品","cateIdLevel1":68,"cateNameLevel1":"进口商品"}}]';
$arr = json_decode($str, true);
$res = array();
$arr = array_map(function($v) use(&$res) {
    $res[$v['content']['cateIdLevel1']][$v['content']['cateIdLevel2']][$v['content']['productId']] = $v;
}, $arr);

echo json_encode($res);

如果是这种形式的字符串,用个array_map吧,如果是有n个字符串像你写的那种,就用array_merge,再array_map

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题