2012-04-26 34 views
0

我有每個循環,當循環輸出保存在籃子陣列中的物品。這很好,但我想在會話變量的每個項目中存儲一些東西,所以我可以在其他地方使用這些信息,我試圖在foreach循環內創建會話變量,但當然每次變量都需要有不同的名稱它通過一個不同的項目循環。我研究瞭如何動態創建變量,我無法弄清楚。這是我一直覺得會派上用場的東西,但是因爲看起來難以避免,但現在我想知道它是否可行。如何在PHP中爲每個循環創建變量併爲其賦值?

這裏是我的每個循環的代碼,你可以我想創建一個在籃下的每個項目三個會話變量裏面看到:

foreach ($basketarray as $value) 
{ 
    echo "<div id='basketitems'><br/>          
    ".$value['name']."<br/> 
    ".$value['id']."<br/> 
    &pound;".$value['price']."<br/> 
    ".$value['size']."<br/> 
    Quantity: ".$value['quantity']."<br/><br/> 
    <img id='searchimage' src=".$value['picture']." width='210' height='250' /><br/>"; 

    $_SESSION['Bprodid'] = $value['id']; 
    $_SESSION['Bprodquantity'] = $value['quantity']; 
    $_SESSION['Bprodprice'] = $value['price']; 

echo "<form action='deletefrombasket.php' name='basketdelete$items' id='basketdelete$items' method='POST'> 

    <input type='submit' name='".$value['basketid']."' value='Remove' id='basketid' name='basketid'/> 

    </form></div>"; 

$items++; 
} 
?> 
    <div id='basketdetails'> 
<?php 

echo "<p>items ". number_format($basketitems)."</p>"; 
echo "<p>Total &pound; ".number_format($baskettotal, 2, '.', ',')."</p>"; 


if($basketitems && $baskettotal !=0) 
{ 
    echo "<a href='clear.php'>Empty Basket</a>"; 
    echo "<a href='checkout.php'>Checkout</a>"; 
} 

所以有可能做這樣的事情?我試圖通過使用計數器來創建可變名稱,但我沒有成功。

我將不勝感激任何意見。

謝謝

回答

2

您的會話變量可以是一個多維數組,因此該循環之前,你可以說:

$_SESSION['my_values'] = array(); 

而且在迴路中:

$_SESSION['my_values'][$value['id']]['Bprodquantity'] = $value['quantity']; 
$_SESSION['my_values'][$value['id']]['price'] = $value['price']; 
// etc. 

編輯:要通過所有的值循環中,您可以使用:

foreach ($_SESSION['my_values'] as $key => $values) 
{ 
    echo $key; // the ID of your product 
    echo $values['quantity']; // the quantity 
    echo $values['price']; // the price 
} 
+0

感謝您的輸入,我正在測試您的解決方案,但我想知道如何才能讓此功能保留多個值?假設我使用$ _SESSION ['my_values'] [$ value ['id']] ['price'] = $ value ['price'];在循環內部,然後在外部,我使用echo $ _SESSION ['my_values'] [$ value ['id']] ['price']來回顯此問題,它只回顯最後一個值。在我的購物籃中,我有3件商品用於測試,他們有三件價格需要存儲,這只是回聲的最後價格。我想知道如何正確使用您的解決方案,我錯過了什麼? 非常感謝! – deucalion0 2012-04-26 22:17:57

+1

@ deucalion0技巧是[[$ value ['id']]';在你的'$ _SESSION ['my_values']'你現在有3個值,你可以通過它們的ID直接訪問,或者你可以在$ _SESSION ['my_values']數組中使用'foreach'來循環訪問它們。你循環的每個項目都是一個數組,其中包含「數量」和「價格」(或任何你所添加的)鍵。我會編輯我的答案。 – jeroen 2012-04-26 23:15:00

+0

非常感謝我現在就試試這個!!!!! – deucalion0 2012-04-26 23:42:08

3

把值放在數組中。然後用一個計數器爲每個循環遞增,以作爲每個值的關鍵字。

$counter = 0; 
foreach ($basketarray as $value) 
{ 
    // Code goes here 

    $_SESSION['Bprodid'][$counter] = $value['id']; 
    $_SESSION['Bprodquantity'][$counter] = $value['quantity']; 
    $_SESSION['Bprodprice']$counter[] = $value['price']; 

    // More code 
    $counter++ 
} 

訪問每個值使用一個循環:

$size = count($_SESSION['Bprodid']); 
for ($i = 0; $i < $size; $i++) 
{ 
    echo $_SESSION['Bprodid'][$i] . "<br>\n"; 
    echo $_SESSION['Bprodquantity'][$i] . "<br>\n"; 
    echo $_SESSION['Bprodprice'][$i] . "<br><br>\n"; 
} 
+0

感謝您的幫助,我已經花了有些時候嘗試你的例子,但它不工作。如何使用存儲在另一個腳本中的會話變量,通常可以將其設置爲變量和腳本中使用的變量,是否仍然以同樣的方式工作? 謝謝! – deucalion0 2012-04-26 18:01:35

+0

它應該以同樣的方式工作。要循環訪問新的會話變量,您可以使用「for循環」。查看我的更新答案的例子。 – 2012-04-26 18:02:57

+0

感謝您的更新代碼,我試了一下,但它不工作。我回顯$ _SESSION ['Bprodid'] [$ counter],它顯示13,這是籃子中兩個項目中的兩個id,1和3.但是當我回顯$ size時,它告訴我值爲1 ,因爲當我運行for循環時,它只回顯11,它是id 1,因爲第一項是id1,數量是1。我可能會使用它錯誤,我生病繼續嘗試,謝謝! – deucalion0 2012-04-26 18:50:39

1

Store零售店值到一個數組$products[$items]["prodId"]等,並在循環後您的會話變量設置爲陣,$_SESSION["products"] = $products。然後您可以使用$_SESSION["products"][$itemNumber]["prodId"]等等來訪問這些項目。

1

您可以使用序列化()和反序列化()函數來保存整個數組中的會話:

$_SESSION['sbasketarray'] = serialize($basketarray); 

,並在需要數據的其他腳本:

if (isset ($_SESSION['sbasketarray'])) { 
    $basketarray = unserialize ($_SESSION['sbasketarray']); 
}