php - 在 session 中添加相同数组键的数组值

标签 php arrays session laravel

我有一个存储在 Session 中的数组结构

编辑:item_id的数量不确定。一笔交易可能包含 1-3 件商品,下一笔交易可能包含 2-20 件商品。

"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"
}]

我想要实现的是将所有具有相同item_iditem_quantity相加

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

这是我到目前为止所尝试过的,但没有得到想要的结果

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);
     }

最佳答案

你走在正确的道路上。请参阅代码中的注释。

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);
  }
}

关于php - 在 session 中添加相同数组键的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23902541/

相关文章:

php - 如何查看数据库的结果是否与数组中的值匹配

python - 在python中高效处理~5000万条记录文件

php - 为什么在 PHP 7 中 $_SESSION 通过引用传递?

javascript - HTML 表单保存到服务器端文本文件

php - 如何在 Symfony 4 的控制台命令中使用记录器?

php - 在 PHP 中进行异步处理的最佳方式

C - 2D 全局数组 -> 在大小 >4 时遇到段错误

php - 用php中的页面标题替换模板页面中的单词

php - 是否可以直接使用 ajax 发送 php session 变量?

PHP session_start();