php 会话数组如果 ID 相同则添加一个元素
php session array add an element if same ID
我得到以下会话数组来存储购物车项目:
print_r($_SESSION['items']):
Array
(
[0] => Array
(
[p_name] => Product A
[p_price] => 13.90
[p_seller] => 2001
)
[1] => Array
(
[p_name] => Product B
[p_price] => 2.00
[p_seller] => 2002
)
[2] => Array
(
[p_name] => Product C
[p_price] => 1.20
[p_seller] => 2002
)
[3] => Array
(
[p_name] => Product D
[p_price] => 50.00
[p_seller] => 2001
)
)
我有一个从数据库调用额外数据的循环:
while($res = $shipment->fetch_object()){
$seller_id = $res->seller;
$shipment_cost = $res->shipment_fee;
//array_push($_SESSION['items']['p_fee'], $shipment_cost);
}
让我们说,在循环中我得到以下数据:
$seller_id = 2001; $shipment_cost = 5.00
$seller_id = 2002; $shipment_cost = 3.00
我想将名称为 ['p_fee']
的额外元素分配并添加到其各自的组 ['p_seller']
if $seller_id(2001) == ['p_seller'] ---> array_push($_SESSION['items']['p_fee'], '5.00') }
if $seller_id(2002) == ['p_seller'] ---> array_push($_SESSION['items']['p_fee'], '3.00') }
可以吗?
$_SESSION['items']
最终可能包含如下元素:
Array
(
[0] => Array
(
[p_name] => Product A
[p_price] => 13.90
[p_seller] => 2001
[p_fee] => 5.00
)
[1] => Array
(
[p_name] => Product B
[p_price] => 2.00
[p_seller] => 2002
[p_fee] => 3.00
)
[2] => Array
(
[p_name] => Product C
[p_price] => 1.20
[p_seller] => 2002
[p_fee] => 3.00
)
[3] => Array
(
[p_name] => Product D
[p_price] => 50.00
[p_seller] => 2001
[p_fee] => 5.00
)
)
是的,你可以。
您可以通过添加值,同时从数据库中检索它来完成此操作。例如:
while($res = $shipment->fetch_object()){
$seller_id = $res->seller;
$shipment_cost = $res->shipment_fee;
foreach ($_SESSION['items'] as $key => $item) {
if ($item['p_seller'] === $seller_id) {
$_SESSION['items'][$key]['p_fee'] = $shipment_cost;
}
}
}
更好(更快)的方法是在 sellerId 和 costs 之间创建一个映射,然后将其放入会话中:
$costMapping = array();
while($res = $shipment->fetch_object()){
$seller_id = $res->seller;
$shipment_cost = $res->shipment_fee;
$costMapping[$seller_id] = $shipment_cost;
}
foreach ($_SESSION['items'] as $key => $item) {
if (isset($costMapping[$item['p_seller']])) {
$_SESSION['items'][$key]['p_fee'] = $costMapping[$item['p_seller']];
}
}
这样你只有2个循环,不管你有多少卖家。
是可以的,你应该做两个循环,首先是收取费用,其次是将它们与项目相关联。
// Fill the fees first
$fees = [];
while($res = $shipment->fetch_object()){
$seller_id = $res->seller;
$shipment_cost = $res->shipment_fee;
$fees[$seller_id] = $shipment_fee;
}
// Assign fees
foreach ($_SESSION['items'] as &$item) {
$fee = $fees[$item['p_seller']] ?: 0; // <- fee will be 0 if not found !
$item['p_fee'] = $fee;
}
希望这对您有所帮助:)
我得到以下会话数组来存储购物车项目:
print_r($_SESSION['items']):
Array
(
[0] => Array
(
[p_name] => Product A
[p_price] => 13.90
[p_seller] => 2001
)
[1] => Array
(
[p_name] => Product B
[p_price] => 2.00
[p_seller] => 2002
)
[2] => Array
(
[p_name] => Product C
[p_price] => 1.20
[p_seller] => 2002
)
[3] => Array
(
[p_name] => Product D
[p_price] => 50.00
[p_seller] => 2001
)
)
我有一个从数据库调用额外数据的循环:
while($res = $shipment->fetch_object()){
$seller_id = $res->seller;
$shipment_cost = $res->shipment_fee;
//array_push($_SESSION['items']['p_fee'], $shipment_cost);
}
让我们说,在循环中我得到以下数据:
$seller_id = 2001; $shipment_cost = 5.00
$seller_id = 2002; $shipment_cost = 3.00
我想将名称为 ['p_fee']
的额外元素分配并添加到其各自的组 ['p_seller']
if $seller_id(2001) == ['p_seller'] ---> array_push($_SESSION['items']['p_fee'], '5.00') }
if $seller_id(2002) == ['p_seller'] ---> array_push($_SESSION['items']['p_fee'], '3.00') }
可以吗?
$_SESSION['items']
最终可能包含如下元素:
Array
(
[0] => Array
(
[p_name] => Product A
[p_price] => 13.90
[p_seller] => 2001
[p_fee] => 5.00
)
[1] => Array
(
[p_name] => Product B
[p_price] => 2.00
[p_seller] => 2002
[p_fee] => 3.00
)
[2] => Array
(
[p_name] => Product C
[p_price] => 1.20
[p_seller] => 2002
[p_fee] => 3.00
)
[3] => Array
(
[p_name] => Product D
[p_price] => 50.00
[p_seller] => 2001
[p_fee] => 5.00
)
)
是的,你可以。
您可以通过添加值,同时从数据库中检索它来完成此操作。例如:
while($res = $shipment->fetch_object()){
$seller_id = $res->seller;
$shipment_cost = $res->shipment_fee;
foreach ($_SESSION['items'] as $key => $item) {
if ($item['p_seller'] === $seller_id) {
$_SESSION['items'][$key]['p_fee'] = $shipment_cost;
}
}
}
更好(更快)的方法是在 sellerId 和 costs 之间创建一个映射,然后将其放入会话中:
$costMapping = array();
while($res = $shipment->fetch_object()){
$seller_id = $res->seller;
$shipment_cost = $res->shipment_fee;
$costMapping[$seller_id] = $shipment_cost;
}
foreach ($_SESSION['items'] as $key => $item) {
if (isset($costMapping[$item['p_seller']])) {
$_SESSION['items'][$key]['p_fee'] = $costMapping[$item['p_seller']];
}
}
这样你只有2个循环,不管你有多少卖家。
是可以的,你应该做两个循环,首先是收取费用,其次是将它们与项目相关联。
// Fill the fees first
$fees = [];
while($res = $shipment->fetch_object()){
$seller_id = $res->seller;
$shipment_cost = $res->shipment_fee;
$fees[$seller_id] = $shipment_fee;
}
// Assign fees
foreach ($_SESSION['items'] as &$item) {
$fee = $fees[$item['p_seller']] ?: 0; // <- fee will be 0 if not found !
$item['p_fee'] = $fee;
}
希望这对您有所帮助:)