PHP: Session 2-Dimensional Array - Отслеживаемые продукты - PullRequest
0 голосов
/ 01 мая 2009

Я пытаюсь создать массив для отображения последних 5 продуктов, просмотренных клиентом.

Массив представляет собой двумерный массив, как показано ниже ...

$ RView = array ( массив (ID => "1001", RefCode => "Ref_01", Name => "Name_01"), ... массив (ID => "1005", RefCode => "Ref_05", Name => "Name_05") );

Значения массива извлекаются из набора записей продуктов и предназначены для работы следующим образом, когда клиент посещает страницу продукта.

  • Страница проверит, существует ли Session Array
  • Если да, переменная массива создается из существующего сеанса
    Если нет, создается новый массив.
  • Массив добавит детали нового продукта.
  • Массив будет учитываться, если в массиве более 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 голос
/ 01 мая 2009

Это более или менее правильно - нужно изменить только 2 строки.

  1. Нет необходимости в дополнительном array () для array_unshift и array_pop.
  2. Когда вы используете array_unshift, вы выдвигаете массив элементов (не идентификатор / коды по отдельности) - я думаю, вы имеете в виду array_unshift($RView, array($prodid,$name,...))
  3. Что если $ RView не имеет 5 элементов? В этом случае вы получаете доступ к неопределенным индексам массива (которые могут показывать или не отображать ошибку). Измените его на цикл foreach: например,
    foreach ($Rview as $prod) echo $prod['Name']...

Это должно работать после внесения этих изменений. Возможно, вы захотите немного очистить стиль кодирования:)


РЕДАКТИРОВАТЬ: О, я вижу, когда вы ссылаетесь на массив в цикле for, он не знает, что массив имеет индексы "ProdID" и "Name". Когда вы создаете массив, вы должны определить индексы с помощью оператора =>.

  • Добавление индексов в массив при использовании array_unshift:
    array_unshift($RView, array("ProdID" => $row_rsProd["ProdID"], "Name"...))

  • Если row_rsProd не слишком велик, вы можете просто прикрепить весь row_rsprod к $ RView.
    поэтому измените array_unshift (...) на $RView[] = $row_rsProd
    Таким образом, индексы сохраняются.

  • В качестве альтернативы вы можете изменить индикаторы в цикле for для соответствия. Прямо сейчас массив, который вы перемещаете в $ RView, основан на 0 - $ RView [0] [0] - это идентификатор продукта для первого продукта и т. Д.
    Таким образом, вы можете изменить содержимое цикла foreach на
    echo "<li>..." $prod[0] $prod[1] $prod[2]

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...