Pergunta

Eu estou tentando criar uma matriz para exibir os últimos 5 produtos um cliente vistos.

A matriz é uma matriz 2 dimensional como abaixo ...

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

Os valores da matriz são obtidas a partir de produtos de registros e é projetado para funcionar da seguinte forma quando um cliente visita a página do produto.

  • Página irá verificar se existe um array de sessão
  • Se sim, uma variável de matriz é criado a partir
    sessão existente Se não, uma nova matriz é criado.
  • matriz irá adicionar os detalhes de novos produtos.
  • matriz vai contar se há mais de 5 produtos existentes na matriz.
  • Se sim, ele irá remover o mais antigo.
    Se não, se move para a próxima etapa.
  • é criado
  • A Sessão / actualizado a partir da matriz revisto.

Meu esforço atual é anexado abaixo ...
Muito obrigado por qualquer ajuda.

    <?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>";
    }
    ?>
Foi útil?

Solução

É mais ou menos certo -. Apenas 2 linhas precisam ser alteradas

  1. Não há nenhuma necessidade para a matriz extra () em torno array_unshift e array_pop.
  2. Quando você usa array_unshift você está empurrando uma série de itens (não a identificação / códigos individualmente) - Eu acho que você array_unshift($RView, array($prodid,$name,...)) média
  3. O que se $ RView não tem 5 elementos? Nesse caso, você está acessando índices de matriz indefinidos (que podem ou não podem mostrar um erro). Alterá-lo para um loop foreach: por exemplo
    foreach ($Rview as $prod) echo $prod['Name']...

Ele deve funcionar depois de fazer essas alterações. Você pode querer limpar o estilo de codificação um pouco, embora:)


EDIT: Oh, eu vejo, quando você está fazendo referência a matriz no loop for ele não sabe que a matriz tem "ProdID" e índices "Nome". Quando você faz uma matriz que você tem que definir os índices usando o operador =>.

  • Adicionar índices para a matriz quando você array_unshift:
    array_unshift($RView, array("ProdID" => $row_rsProd["ProdID"], "Name"...))

  • Se row_rsProd não é muito grande, você pode apenas alinhavar todo o row_rsprod para $ RView.
    Assim, a mudança array_unshift (...) para apenas $RView[] = $row_rsProd
    Desta forma, os índices são preservados.

  • Como alternativa, você pode alterar as indicies no loop for para jogo. Neste momento, a matriz que você unshift para $ RView é baseado em 0 - $ RView [0] [0] é o ID do produto para o primeiro produto, etc.
    Então você pode mudar as coisas no loop foreach para
    echo "<li>..." $prod[0] $prod[1] $prod[2]

Espero que ajude!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top