加入会话同一阵列排列键的值 [英] Add array values of same array keys in session
本文介绍了加入会话同一阵列排列键的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有被存储在会话的阵列结构
修改: 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屋!
查看全文