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

Solución

Es más o menos correcto: solo se deben cambiar 2 líneas.

  1. No hay necesidad de una matriz adicional () alrededor de array_unshift y array_pop.
  2. 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,...))
  3. ¿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!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top