【问题标题】:How to move element to another array based from id_item如何从 id_item 将元素移动到另一个数组
【发布时间】:2020-07-29 19:10:02
【问题描述】:

我有一个数组,但目前,数组还是基于 id_order, ,像这样:

这里是我的控制器

public function detail()
{
      $data = Order::with('detail')->get();
      return $data;
}

结果:

[
   {
     "id": 1, //id_order
     "order_number" : "IT.123.76",
     "status" : "Pending",
     "details" : [
                    { 
                       "id" : 1,
                       "id_order" : 1,
                       "id_item" : 2, //based from this
                       "name" : "Avocado Juice",
                       "qty" : 7
                    },
                    { 
                       "id" : 2,
                       "id_order" : 1,
                       "id_item" : 3, //based from this
                       "name" : "Orange Juice",
                       "qty" : 2
                    },
                    { 
                       "id" : 3,
                       "id_order" : 1,
                       "id_item" : 5, //based from this
                       "name" : "Mango Juice",
                       "qty" : 1
                    }
                ]
     },
     {
     "id": 2, //id_order
     "order_number" : "IT.123.78",
     "status" : "Pending",
     "details" : [
                    { 
                       "id" : 4,
                       "id_order" : 2,
                       "id_item" : 2, //based from this
                       "name" : "Avocado Juice",
                       "qty" : 1
                    },
                    { 
                       "id" : 5,
                       "id_order" : 2,
                       "id_item" : 9, //based from this
                       "name" : "Ice Tea",
                       "qty" : 2
                    }
                ]
         }

    }
]

如何将数组的结构更改为这样(基于 id_item 和名称 item 成为每个元素中的键)以及计算每个项目的数量,例如 = 鳄梨汁有 2 个订单,第一个订单有数量: 7 和二阶 qty: 1 然后将 8 个结果相加?

[
  {
   "qty_total" : 8, // from 7+1 in avocado juice
   "Avocado Juice" : [
                        {
                           "id" : 1, //From id_order
                           "id_item" : 2, //Avocado Juice
                           "order_number" : "IT.123.76",
                           "qty" : 7
                        },
                        {
                           "id" : 2, //From id_order
                           "id_item" : 2, //Avocado Juice
                           "order_number" : "IT.123.78",
                           "qty" : 1
                        }
                ]
   },
   {
    "qty_total" : 2,
    "Orange Juice" : [
                        {
                           "id" : 1, //From id_order
                           "id_item" : 3, //Orange Juice
                           "order_number" : "IT.123.76",
                           "qty" : 2
                        }
                   ]
   },
   {
    "qty_total" : 1,
    "Mango Juice" : [
                        {
                           "id" : 2, //From id_order
                           "id_item" : 5, //Mango Juice
                           "order_number" : "IT.123.76", //order_number Id_order 1
                           "qty" : 1
                        }
                   ]
   },
   {
    "qty_total" : 2,
    "Ice Tea" : [
                        {
                           "id" : 1, //From id_order
                           "id_item" : 9, //Ice Tea
                           "order_number" : "IT.123.78",
                           "qty" : 2
                        }
                   ]
   },
]

感谢提前

【问题讨论】:

    标签: php arrays json laravel eloquent


    【解决方案1】:

    你可以试试这样的。

    const orders = [
        {
            "id": 1, //id_order
            "order_number": "IT.123.76",
            "status": "Pending",
            "details": [
                {
                    "id": 1,
                    "id_order": 1,
                    "id_item": 2, //based from this
                    "name": "Avocado Juice",
                    "qty": 7
                },
                {
                    "id": 2,
                    "id_order": 1,
                    "id_item": 3, //based from this
                    "name": "Orange Juice",
                    "qty": 2
                },
                {
                    "id": 3,
                    "id_order": 1,
                    "id_item": 5, //based from this
                    "name": "Mango Juice",
                    "qty": 1
                }
            ]
        }, {
            "id": 2,
            "order_number": "IT.123.78",
            "status": "Pending",
            "details": [
                {
                    "id": 4,
                    "id_order": 2,
                    "id_item": 2, //based from this
                    "name": "Avocado Juice",
                    "qty": 1
                },
                {
                    "id": 5,
                    "id_order": 2,
                    "id_item": 9, //based from this
                    "name": "Ice Tea",
                    "qty": 2
                }
            ]
        }
    ];
    var ordersById = {};
    orders.forEach((order) => {
      order.details.forEach((detail) => {
          // ToDo: filter out completed/nonpending orders
          let orderGroup;
          
          if (!ordersById[detail.id_item]) {
            orderGroup = {qty_total: detail.qty};
            orderGroup[detail.name] = [{id: detail.id_order, id_item: detail.id_item, order_number: order.order_number, qty: detail.qty}];
            ordersById[detail.id_item] = orderGroup;
          } else {
            orderGroup = ordersById[detail.id_item];
            orderGroup.qty_total += detail.qty;
            orderGroup[detail.name].push([{id: detail.id_order, id_item: detail.id_item, order_number: order.order_number, qty: detail.qty}]);
          }
      });
    });
    
    const result = Object.keys(ordersById).map((order_id) => { return ordersById[order_id];});;
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2011-07-15
      相关资源
      最近更新 更多