2009-05-01 36 views
0

我試圖創建一個數組來顯示客戶查看的最後5個產品。PHP:會話二維數組 - 軌道查看產品

所述陣列是二維陣列象下面...

$ RView =陣列( 陣列(ID => 「1001」,RefCode => 「Ref_01」,名稱=> 「Name_01」), ... array(ID =>「1005」,RefCode =>「Ref_05」,Name =>「Name_05」) );

數組值從產品記錄集中檢索,設計爲當客戶訪問產品頁面時按如下方式運行。

  • 頁將檢查。如果是,從
    如果沒有,則創建一個新的數組現有會話創建一個數組變量會話陣列存在
  • 數組將添加新的產品詳細信息。
  • 如果陣列中存在多於5個現有產品,數組將會計數。
  • 如果是,它將刪除最老的。
    如果否,轉到下一步。
  • 會話從修改過的數組中創建/更新。

我目前的努力附在下面......
非常感謝您的任何幫助。

<?php 
    session_start() 
    // Get or Create Array 
    IF (isset($_SESSION['sessRView'])) { 
    $RView = ($_SESSION['sessRView']); } 
    ELSE { 
    $RView = array(array()); 
    } 

    // Append currently viewed Product to Array 
    array(array_unshift($RView, $row_rsPrd['PrdID'], $row_rsPrd['RefCode'], $row_rsPrd['Name'])); 

    // Check if more than 5 products exist in Array, if so delete. 
    IF (sizeof($RView) > 5) { 
    array(array_pop($RView)); } 

    // Update Session for next page 
    $_SESSION['sessRView'] = $RView; 

    // Display Array 
    for ($row = 0; $row < 5; $row++) 
    { 
    echo "<ul>"; 
     echo "<li><a href='?PrdID=".$RView[$row]["PrdID"]."'>".$RView[$row]["RefCode"]."</a> : ".$RView[$row]["Name"]."</li>"; 
    echo "</ul>"; 
    } 
    ?> 

回答

1

它或多或少是正確的 - 只需要更改兩行。

  1. 在array_unshift和array_pop周圍不需要額外的array()。
  2. 當你使用你推array_unshift項目的數組(不是ID /代碼單獨) - 我想你的意思array_unshift($RView, array($prodid,$name,...))
  3. 如果$ RView沒有5元?在這種情況下,您正在訪問未定義的數組索引(可能會或可能不會顯示錯誤)。將其更改爲一個foreach循環:例如
    foreach ($Rview as $prod) echo $prod['Name']...

進行這些更改後,它應該工作。您可能要清理的編碼風格有點,雖然:)


編輯:哦,我明白了,當你引用數組中的for循環,它不知道該數組具有「 ProdID「和」名稱「索引。當你創建一個數組時,你必須使用=>運算符來定義索引。

  • 添加索引,當你array_unshift數組:
    array_unshift($RView, array("ProdID" => $row_rsProd["ProdID"], "Name"...))

  • 如果row_rsProd不是太大,你可以釘在整個row_rsprod到$ RView。
    所以改變array_unshift(...)到$RView[] = $row_rsProd
    這樣索引被保留。

  • 或者你可以改變indicies在for循環相匹配。現在,您在$ RView上轉移的數組基於0 - $ RView [0] [0]是第一個產品的產品ID等。
    因此,您可以將foreach循環中的內容更改爲
    echo "<li>..." $prod[0] $prod[1] $prod[2]

希望幫助!

+0

感謝您的幫助。 我已經做了你所建議的改變(我認爲),但我無法顯示數組中的值。我只是得到5個項目符號的HTML列表。 我做的更改是... array_unshift($ RView,array($ row_rsPrd ['PrdID'],$ row_rsPrd ['RefCode'],$ row_rsPrd ['Name'])); - IF(sizeof($ RView)> 5){array_pop($ RView); } - 的foreach($ RView爲$ PROD) { 回聲 「

」; ;} 任何想法有什麼不對? – ticallian 2009-05-01 04:25:05