我正在使用CODEIGNITER Cart Class。以下是购物车内容的VAR_DUMP
。我有一个无线电选择字段,允许您选择SHIP
选项。问题是我的PHP没有获得SHIP
值,而只返回购物车价值中的最后一项并乘以购物车项目的总数。如何从每个项目中获取SHIP
数组并对值进行求和?
$ship_array = $this->cart->ship($item['rowid']);
foreach ($ship_array as $index => $ship_option){
#SHIPPING CALC
$ship_total = 0;
foreach ($cart as $item)
{
$ship_total += $ship_option;
}
echo '<label><input type="radio" name="print" class="option" data-number="'. $ship_total .'" value="'. $index .'"/> UPS '. $index .' </label> '; }
^此代码只会从购物车最后一项中的ship
获取值。结果会说ground
运费是43.35美元(14.45(地面运费价值*总共3项)
显然这是错误的我需要添加每个$item
array (size=3)
'554ed09a5f80917741359cc9da50a75c' =>
array (size=8)
'rowid' => string '554ed09a5f80917741359cc9da50a75c' (length=32)
'id' => string '101' (length=3)
'qty' => string '1' (length=1)
'price' => string '112.5' (length=5)
'name' => string 'Business Card' (length=13)
'ship' =>
array (size=3)
'Ground' => float 9.73
'2nd Day Air' => float 18.54
'Overnight' => float 26.27
'options' =>
array (size=2)
'Print Package' => string 'Pro' (length=3)
'Design Package' => string 'Premium' (length=7)
'subtotal' => float 112.5
'675d8a197a25e6720af7ac05707fee40' =>
array (size=8)
'rowid' => string '675d8a197a25e6720af7ac05707fee40' (length=32)
'id' => string '102' (length=3)
'qty' => string '1' (length=1)
'price' => string '446' (length=3)
'name' => string 'Booklet' (length=7)
'ship' =>
array (size=3)
'Ground' => float 14.45
'2nd Day Air' => float 22.57
'Overnight' => float 34.12
'options' =>
array (size=2)
'Print Package' => string 'Plus' (length=4)
'Design Package' => string 'Ultimate' (length=8)
'subtotal' => int 446
'aea5d2f84151e65a0a1e50371aad26aa' =>
array (size=8)
'rowid' => string 'aea5d2f84151e65a0a1e50371aad26aa' (length=32)
'id' => string '102' (length=3)
'qty' => string '1' (length=1)
'price' => string '325' (length=3)
'name' => string 'Booklet' (length=7)
'ship' =>
array (size=3)
'Ground' => float 14.45
'2nd Day Air' => float 22.57
'Overnight' => float 34.12
'options' =>
array (size=2)
'Print Package' => string 'Pro' (length=3)
'Design Package' => string 'Premium' (length=7)
'subtotal' => int 325
答案 0 :(得分:0)
移动
$ship_total = 0;
超出第一个foreach循环。
编辑使用此:
$ship_array = $this->cart->ship($item['rowid']);
$ship_total = 0; //this moved
foreach ($ship_array as $index => $ship_option){
#SHIPPING CALC
foreach ($cart as $item)
{
$ship_total += $item['ship'][$ship_option] * $item['qtq']; //this changed
}
echo '<label><input type="radio" name="print" class="option" data-number="'. $ship_total .'" value="'. $index .'"/> UPS '. $index .' </label> ';
}
答案 1 :(得分:0)
你可以尝试
$array = array(
'554ed09a5f80917741359cc9da50a75c' => array('rowid' => '554ed09a5f80917741359cc9da50a75c','id' => '101','qty' => '1','price' => '112.5','name' => 'Business Card','ship' => array('Ground' => 9.73,'2nd Day Air' => 18.54,'Overnight' => 26.27),'options' => array('Pr Package' => 'Pro','Design Package' => 'Premium','subtotal' => 112.5)),
'675d8a197a25e6720af7ac05707fee40' => array('rowid' => '675d8a197a25e6720af7ac05707fee40','id' => '102','qty' => '1','price' => '446','name' => 'Booklet','ship' => array('Ground' => 14.45,'2nd Day Air' => 22.57,'Overnight' => 34.12),'options' => array('Pr Package' => 'Plus','Design Package' => 'Ultimate','subtotal' => 446)),
'aea5d2f84151e65a0a1e50371aad26aa' => array('rowid' => 'aea5d2f84151e65a0a1e50371aad26aa','id' => '102','qty' => '1','price' => '325','name' => 'Booklet','ship' => array('Ground' => 14.45,'2nd Day Air' => 22.57,'Overnight' => 34.12),'options' => array('Pr Package' => 'Pro','Design Package' => 'Premium','subtotal' => 325)));
$shipArray = $array ; // Replace with $this->cart->ship($item['rowid']);
$shipTotal = array("prize"=>0,"ground"=>0,"air"=>0,"overnight"=>"0");
foreach ($shipArray as $index => $shipOption){
$shipTotal['prize'] += $shipOption['qty'] * $shipOption['price'];
$shipTotal['ground'] += $shipOption['ship']['Ground'];
$shipTotal['air'] += $shipOption['ship']['2nd Day Air'];
$shipTotal['overnight'] += $shipOption['ship']['Overnight'];
}
var_dump($shipTotal);
输出
array
'prize' => float 883.5
'ground' => float 38.63
'air' => float 63.68
'overnight' => float 94.51