在不使用PHP的情况下计算foreach循环中的会话

时间:2016-10-14 23:26:09

标签: php session

我正在尝试计算存储在名为$_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)) ;

enter image description here

1 个答案:

答案 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"