2016-10-14 7 views
0

$_SESSION['product'.$id];というセッションに格納されているすべての製品を数えようとしています。 しかし、それは数えていない、このような数え方1 1 1 1. それで、各製品IDのカウント1が分けられます。 私のforeachループ...foreachループ内のセッション数がカウントアップしていないPHP

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 

これが起こっているのはなぜか? 私が試したもの:

$product_count = count(array_filter(array_keys($_SESSION), function($x) { 
    return substr($x, 0, 8) == 'product_'; 
})); 

をしかし、私はコメントで述べたように、あなたのデータを再設計した場合、それはおそらく良いでしょう:

print_r(count($_SESSION['product_'.$item_id])) ; 
print_r(count($name)) ; 
print_r(count($product)) ; 
print_r(count($value)) ; 

enter image description here

+1

この変数は配列ではなく文字列であるため、常に1を返します。 – Greg

+1

'$ _SESSION ['product'_を使用する代わりに。 $ id '] '$ _SESSION [' products ']'に配列を格納するのはどうでしょうか?配列のキーは '$ id'ですか? – Barmar

+1

BTW、 'substr($ name、8)'が最後まで行くので、 'strlen($ name)-8'を計算する必要はありません。 – Barmar

答えて

1

あなたはこれを使用することができます。各製品を別々のセッション変数に格納する代わりに、配列に格納します。だから$_SESSION['product_'.$i]の代わりに$_SESSION['products'][$i]があります。そして、あなたはproduct_とのセッション変数の人間かどうかをチェックするコードを必要としないあなただけの

foreach ($_SESSION['products'] as $id => $value) 

を使用する可能性があり、製品の数を取得するには、それだけでcount($_SESSION['products'])だろう。

+0

を数えようとしています。私が見たことは私の間違いです...私はforeachループの中でカウントを使用していました。私のカート機能からではありません。 –

+0

私はその質問のコードでそれが表示されません。カウントをテーブルの見出しに入れたいので、ループ内でどのようにするのが理にかなっていますか? – Barmar

関連する問題