Produtos da trilha vistos - Sessão matriz de 2 dimensões: PHP
-
03-07-2019 - |
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>";
}
?>
Solução
É mais ou menos certo -. Apenas 2 linhas precisam ser alteradas
- Não há nenhuma necessidade para a matriz extra () em torno array_unshift e array_pop.
- 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 - 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!