PHP: Matriz bidimensional de sesión - Seguimiento de productos vistos
-
03-07-2019 - |
Pregunta
Estoy tratando de crear una matriz para mostrar los últimos 5 productos que ha visto un cliente.
La matriz es una matriz bidimensional como la siguiente ...
$ RView = array ( array (ID = > " 1001 " ;, RefCode = > " Ref_01 " ;, Name = > " Nombre_01 "), ... array (ID = > " 1005 " ;, RefCode = > " Ref_05 " ;, Name = > " Nombre_05 ") );
Los valores de la matriz se recuperan del conjunto de registros de productos y están diseñados para funcionar de la siguiente manera cuando un cliente visita una página de productos.
- La página verificará si existe una matriz de sesión
- En caso afirmativo, se crea una variable de matriz a partir de la sesión existente
Si no, se crea una nueva matriz. - Array agregará los detalles del nuevo producto.
- La matriz contará si hay más de 5 productos existentes en la matriz.
- En caso afirmativo, eliminará el más antiguo.
Si no, se mueve al siguiente paso. - Se crea / actualiza una sesión desde la matriz revisada.
Mi esfuerzo actual se adjunta a continuación ...
Muchas gracias por cualquier ayuda.
<?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>";
}
?>
Solución
Es más o menos correcto: solo se deben cambiar 2 líneas.
- No hay necesidad de una matriz adicional () alrededor de array_unshift y array_pop.
- Cuando usas array_unshift estás empujando una matriz de elementos (no la identificación / códigos individualmente) - Creo que te refieres a
array_unshift($RView, array($prodid,$name,...))
- ¿Qué pasa si $ RView no tiene 5 elementos? En ese caso, está accediendo a índices de matriz indefinidos (que pueden mostrar o no un error). Cámbielo a un bucle foreach: por ejemplo,
foreach ($Rview as $prod) echo $prod['Name']...
Debería funcionar después de realizar estos cambios. Sin embargo, es posible que desee limpiar un poco el estilo de codificación :)
EDITAR: Ah, ya veo, cuando hace referencia a la matriz en el bucle for, no sabe que la matriz tiene " ProdID " y " Nombre " índices. Cuando crea una matriz, debe definir los índices utilizando = & Gt; operador.
-
Agregue índices a la matriz cuando array_unshift:
array_unshift($RView, array("ProdID" => $row_rsProd["ProdID"], "Name"...))
-
Si row_rsProd no es demasiado grande, puede agregar todo el row_rsprod en $ RView.
así que cambie array_unshift (...) a solo$RView[] = $row_rsProd
De esta forma se conservan los índices. - Alternativamente, puede cambiar las indicaciones en el bucle for para que coincidan. En este momento, la matriz que no cambia a $ RView está basada en 0: $ RView [0] [0] es el ID del producto para el primer producto, etc.
Para que pueda cambiar las cosas en el bucle foreach a
echo "<li>..." $prod[0] $prod[1] $prod[2]
¡Espero que eso ayude!