加入会话同一阵列排列键的值 [英] Add array values of same array keys in session

查看:111
本文介绍了加入会话同一阵列排列键的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有被存储在会话的阵列结构

修改 ITEM_ID 数的不明确。它也许1-3项目上的一个交易,2-20项目上的下一个。

 项目:[{
    ITEM_ID:1
    item_quantity:151
},{
    ITEM_ID:2
    item_quantity:54
},{
    ITEM_ID:2
    item_quantity:23
},{
    ITEM_ID:3
    item_quantity:3
},{
    ITEM_ID:3
    item_quantity:3
}]

我试图做到的,是添加了所有 item_quantity 具有相同 ITEM_ID

 项目:[{
    ITEM_ID:1
    item_quantity:151
},{
    ITEM_ID:2
    item_quantity:77
},{
    ITEM_ID:3
    item_quantity:6
}]

这是我到目前为止已经试过,但我没有得到期望的结果。

控制器

 公共功能保存(){
    如果(输入::具有('的addItem')){
        如果(会话::有('项目')){
            会议::推('项目',[
                ITEM_ID'=>输入::得到('ITEM_ID'),
                item_quantity'=>输入::得到('item_quantity')
            ]);
            $阵列=会话::得到('项目');            的foreach($数组$关键=> $值){
                的foreach($值$ ITEM_ID => $ item_quantity){
                    $总=阵列();                    的$ id = $值['ITEM_ID'];                    $数量= $值['item_quantity'];                    如果(!使用isset($总[$ ID])){
                        $总[$ ID] = 0;
                    }                    $总[$ ID] + = $数量;
                    回声$总[$ ID];                }
            }其他{
                会议::把('项目',[
                    0 => [
                        ITEM_ID'=>输入::得到('ITEM_ID'),
                        item_quantity'=>输入::得到('item_quantity')
                    ]
                ]);
            }            $数据=会话::所有();            //返回$的数据;            $项目=项目::名单('ITEM_NAME','ID');
            返回查看::使(测试) - GT;与('数据',$数据) - GT;与('项目',$项目);
     }


解决方案

您是在正确的轨道上。请参见code注释。

 公共功能保存(){
  如果(输入::具有('的addItem')){
    如果(会话::有('项目')){
      会议::推('项目',[
          ITEM_ID'=>输入::得到('ITEM_ID'),
          item_quantity'=>输入::得到('item_quantity')
      ]);
      $阵列=会话::得到('项目');
      $总=阵列(); //移动以外的foreach循环,因为我们不希望重置      的foreach($数组$关键=> $值){          的$ id = $值['ITEM_ID'];
          $数量= $值['item_quantity'];          如果(!使用isset($总[$ ID])){
            $总[$ ID] = 0;
          }          $总[$ ID] + = $数量;
          回声$总[$ ID];
      }      //现在从数组转换我们的关联数组(actual_item_id => actual_item_quantity,....)
      //到数组(阵列('ITEM_ID'=> actual_item_id,'item_quantity'=> actual_item_quantity),....)
      $项目=阵列();      的foreach($总为$ ITEM_ID => $ item_quantity){
        $项目[] =数组(
            ITEM_ID'=> $ ITEM_ID,
            item_quantity'=> $ item_quantity
        );
      }      会议::把('项目',$项目);
    }其他{
      会议::把('项目',[
          0 => [
              ITEM_ID'=>输入::得到('ITEM_ID'),
              item_quantity'=>输入::得到('item_quantity')
          ]
      ]);
    }    $数据=会话::所有();    //返回$的数据;    $项目=项目::名单('ITEM_NAME','ID');
    返回查看::使(测试) - GT;与('数据',$数据) - GT;与('项目',$项目);
  }
}

I have an array structure that is stored in Session

edit : the number of item_id's is not definite. It maybe 1-3 items on one transaction and 2-20 items on the next.

"items": [{
    "item_id": "1",
    "item_quantity": "151"
}, {
    "item_id": "2",
    "item_quantity": "54"
}, {
    "item_id": "2",
    "item_quantity": "23"
}, {
    "item_id": "3",
    "item_quantity": "3"
}, {
    "item_id": "3",
    "item_quantity": "3"
}]

What I'm trying to achieve is to add up all item_quantity which has the same item_id

"items": [{
    "item_id": "1",
    "item_quantity": "151"
}, {
    "item_id": "2",
    "item_quantity": "77"
}, {
    "item_id": "3",
    "item_quantity": "6"
}]

This is what I have tried so far, but I'm not getting the desired result

Controller

public function Save() {
    if (Input::has('addItem')) {
        if (Session::has('items')) {
            Session::push('items', [
                'item_id' => Input::get('item_id'),
                'item_quantity' => Input::get('item_quantity')
            ]);
            $array = Session::get('items');

            foreach($array as $key => $value) {
                foreach($value as $item_id => $item_quantity) {
                    $total = array();

                    $id = $value['item_id'];

                    $quantity = $value['item_quantity'];

                    if (!isset($total[$id])) {
                        $total[$id] = 0;
                    }

                    $total[$id] += $quantity;
                    echo $total[$id];

                }
            } else {
                Session::put('items', [
                    0 => [
                        'item_id' => Input::get('item_id'),
                        'item_quantity' => Input::get('item_quantity')
                    ]
                ]);
            }

            $data = Session::all();

            //return $data;

            $item = Item::lists('item_name', 'id');
            return View::make('test')->with('data', $data)->with('items', $item);
     }

解决方案

You're on the right track. See comments in the code.

public function Save() {
  if (Input::has('addItem')) {
    if (Session::has('items')) {
      Session::push('items', [
          'item_id' => Input::get('item_id'),
          'item_quantity' => Input::get('item_quantity')
      ]);
      $array = Session::get('items');
      $total = array(); //move outside foreach loop because we don't want to reset it

      foreach ($array as $key => $value) {

          $id = $value['item_id'];
          $quantity = $value['item_quantity'];

          if (!isset($total[$id])) {
            $total[$id] = 0;
          }

          $total[$id] += $quantity;
          echo $total[$id];
      }

      //now convert our associative array from  array(actual_item_id => actual_item_quantity,....)
      //into array(array('item_id' => actual_item_id, 'item_quantity' => actual_item_quantity), ....)
      $items = array();

      foreach($total as $item_id => $item_quantity) {
        $items[] = array(
            'item_id' => $item_id,
            'item_quantity' => $item_quantity
        );
      }

      Session::put('items', $items);
    } else {
      Session::put('items', [
          0 => [
              'item_id' => Input::get('item_id'),
              'item_quantity' => Input::get('item_quantity')
          ]
      ]);
    }

    $data = Session::all();

    //return $data;

    $item = Item::lists('item_name', 'id');
    return View::make('test')->with('data', $data)->with('items', $item);
  }
}

这篇关于加入会话同一阵列排列键的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆