$_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)) ;
この変数は配列ではなく文字列であるため、常に1を返します。 – Greg
'$ _SESSION ['product'_を使用する代わりに。 $ id '] '$ _SESSION [' products ']'に配列を格納するのはどうでしょうか?配列のキーは '$ id'ですか? – Barmar
BTW、 'substr($ name、8)'が最後まで行くので、 'strlen($ name)-8'を計算する必要はありません。 – Barmar