一维数组分组成二维数组
目标
把goods_spec
里相同attr_id
的数组分成一组,然后再放回goods_spec
原始数据
{
"code": 200,
"msg": "success",
"data": {
"id": 1,
"goods_name": "情感挽回方案 ",
"goods_sn": "g0001",
"cate_id": 1,
"meals_number": 1,
"shop_price": 1000,
"pur_price": 1000,
"vip_price": 1000,
"keyword": "情感挽回方案 ",
"goods_desc": "情感挽回方案 ",
"goods_details": "情感挽回方案 ",
"image_logo": "/static/images/shop01.jpg",
"sort": 50,
"seller_note": "",
"is_delete": 0,
"status": 1,
"created_at": "2019-11-21 10:34:26",
"updated_at": "2019-11-21 10:34:26",
"goods_spec": [
{
"id": 1,
"goods_id": 1,
"name": "规格",
"value": "金百合1",
"code": null,
"attr_price": "0.00",
"attr_id": 1
},
{
"id": 2,
"goods_id": 1,
"name": "规格",
"value": "金百合2",
"code": null,
"attr_price": "10.00",
"attr_id": 1
},
{
"id": 3,
"goods_id": 1,
"name": "颜色",
"value": "红色",
"code": null,
"attr_price": "0.00",
"attr_id": 2
},
{
"id": 4,
"goods_id": 1,
"name": "颜色",
"value": "红色",
"code": null,
"attr_price": "5.00",
"attr_id": 2
}
]
}
}
目标结果:
{
"code": 200,
"msg": "success",
"data": {
"id": 1,
"goods_name": "情感挽回方案 ",
"goods_sn": "g0001",
"cate_id": 1,
"meals_number": 1,
"shop_price": 1000,
"pur_price": 1000,
"vip_price": 1000,
"keyword": "情感挽回方案 ",
"goods_desc": "情感挽回方案 ",
"goods_details": "情感挽回方案 ",
"image_logo": "/static/images/shop01.jpg",
"sort": 50,
"seller_note": "",
"is_delete": 0,
"status": 1,
"created_at": "2019-11-21 10:34:26",
"updated_at": "2019-11-21 10:34:26",
"goods_spec": {
"规格": [
{
"id": 1,
"goods_id": 1,
"name": "规格",
"value": "金百合1",
"code": null,
"attr_price": "0.00",
"attr_id": 1
},
{
"id": 2,
"goods_id": 1,
"name": "规格",
"value": "金百合2",
"code": null,
"attr_price": "10.00",
"attr_id": 1
}
],
"颜色": [
{
"id": 3,
"goods_id": 1,
"name": "颜色",
"value": "红色",
"code": null,
"attr_price": "0.00",
"attr_id": 2
},
{
"id": 4,
"goods_id": 1,
"name": "颜色",
"value": "红色",
"code": null,
"attr_price": "5.00",
"attr_id": 2
}
]
}
}
}
thinkphp5 model 代码
<?php
namespace app\api\model;
use app\common\model\ModelBase;
use think\Db;
class Goods extends ModelBase
{
// 数据库表前缀
// protected $connection = ['prefix'=> ''];
// protected $update = ["update_time"];
// protected $table = 'user';
protected $pk = "id";
// 追加属性
protected $append = [
// "goods_spec", "selling_price", "checked", "goods_info"
"goods_spec"
];
public function getGoodsSpecAttr($value, $data)
{
$goods_id = $data['id'];
$goodsSpecInfo = db("goods_spec")
->where("goods_id", $goods_id)
->select();
return $this->getArrayGroup($goodsSpecInfo) ;
}
//一组数组分组成二维数组
//$arrayAll 一维数组
function getArrayGroup($arrayAll){
$goodsAttrIds = [];
foreach ($arrayAll as $k =>$v){
array_push($goodsAttrIds,$v["attr_id"]);
}
$goodsAttrIds = array_unique($goodsAttrIds);
$goodsSpec = [];
$goodsSpecTmp = [];
$nameTmp = '';
foreach ($goodsAttrIds as $k =>$v){
foreach ($arrayAll as $ks =>$gSpec){
if ($v == $gSpec["attr_id"]){
$nameTmp = $gSpec["name"];
array_push($goodsSpecTmp,$gSpec);
}
}
$goodsSpec[$nameTmp] = $goodsSpecTmp;
$goodsSpecTmp = [];
$nameTmp = '';
}
return $goodsSpec;
}
/**
* @return mixed
* @author: haima
* @name: setUpdateTimeAttr
* @describe:
*/
protected function setUpdateTimeAttr()
{
return time();
}
//获取指定id的商品
public function GetGoodsDetailById($id){
return $this->find($id)->toArray();
}
//一对多
// public function GetGoodsDetailById($id){
// $goodsInfo = $this
//// ->with(['getGoodsSpec'])
// ->find($id)->toArray();
//
// return $goodsInfo;
// }
//一对一关联查询lb_user_ext
// public function getGoodsSpec()
// {
//// return $this->belongsTo('goods_spec','id','goods_id');
// return $this->hasMany('goods_spec','goods_id');
// }
}
[Haima的博客]
http://www.cnblogs.com/haima/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构