我正在尝试计算存储在名为$_SESSION['product'.$id];
的会话中的所有产品。
但它不算数,它的数量就像这个1 1 1 1。
因此,每个产品ID的计数1分开。
我的foreach循环...
foreach ($_SESSION as $name => $value) {
if($value > 0){
if(substr($name, 0, 8 ) == "product_"){
$length = strlen($name) -8;
$item_id = substr($name,8 , $length);
$query = "SELECT *
FROM gallery2
WHERE gallery2.id =".escape_string($item_id). "";
$run_item = mysqli_query($conn,$query);
while($rows = mysqli_fetch_assoc($run_item)){
$vari = $rows['variante'];
$num = $rows['title'];
$id = $rows['id'];
if(!isset($_SESSION['icms'.$id])) {
$_SESSION['icms'.$id]='0';
}else{
$_SESSION['icms'.$id];
}
//some code here
$subtotal=$value * $_SESSION['icms'.$id];
$cost=$_SESSION['icms'.$id];
$product = '
<tr>
<td style="width:100px; "><img src="../'.$rows['image'].'" style="width:90%;border: 1px solid black;"></td>
<td>'.$num.''.$vari.'</td>
//some code here
<td class="product'.$id.'">'.$value.'</td>
<td class="cost" data-id="'.$id.'" >R$:'.$cost.'</td>
<td class="subtotal" data-id="'.$id.'">R$:'.number_format($subtotal, 2, '.', '') .'</td>
<td>
'.$btn_add.' '.$btn_remove.' '.$btn_delete.'
</td>
</tr>';
echo $product;
//some closing brackets
为什么会这样? 我尝试了什么:
print_r(count($_SESSION['product_'.$item_id])) ;
print_r(count($name)) ;
print_r(count($product)) ;
print_r(count($value)) ;
答案 0 :(得分:1)
您可以使用:
$product_count = count(array_filter(array_keys($_SESSION), function($x) {
return substr($x, 0, 8) == 'product_';
}));
但正如我在评论中提到的,如果重新设计数据可能会更好。不是将每个产品存储在单独的会话变量中,而是将它们存储在数组中。因此,$_SESSION['product_'.$i]
代替$_SESSION['products'][$i]
而不是product_
。那么你就不需要用于检查会话变量是否与foreach ($_SESSION['products'] as $id => $value)
一起生成的代码,你可以使用
count($_SESSION['products'])
为了获得产品数量,它只是data-role="table" id="PortConfig_Table" data-mode="columntoggle" class="ui-responsive"
。