Domanda

Sto cercando di creare un array per visualizzare gli ultimi 5 prodotti visualizzati da un cliente.

L'array è un array bidimensionale come sotto ...

$ RView = array (       array (ID = > " 1001 " ;, RefCode = > " Ref_01 " ;, Nome = > " Nome_01 "),       ...       array (ID = > " 1005 " ;, RefCode = > " Ref_05 " ;, Nome = > " Nome_05 ") );

I valori dell'array vengono recuperati dal recordset dei prodotti ed è progettato per funzionare come segue quando un cliente visita una pagina del prodotto.

  • La pagina verificherà se esiste una matrice di sessione
  • In caso affermativo, viene creata una variabile di array dalla sessione esistente
    In caso contrario, viene creato un nuovo array.
  • L'array aggiungerà i dettagli del nuovo prodotto.
  • La matrice conterà se ci sono più di 5 prodotti esistenti nella matrice.
  • Se sì, rimuoverà il più vecchio.
    In caso contrario, passa al passaggio successivo.
  • Una sessione viene creata / aggiornata dalla matrice rivista.

Il mio attuale impegno è allegato di seguito ...
Mille grazie per l'aiuto.

    <?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>";
    }
    ?>
È stato utile?

Soluzione

È più o meno giusto - solo 2 linee devono essere cambiate.

  1. Non è necessario l'array extra () attorno a array_unshift e array_pop.
  2. Quando usi array_unshift stai spingendo una matrice di elementi (non l'ID / i codici singolarmente) - Penso che intendi array_unshift($RView, array($prodid,$name,...))
  3. Cosa succede se $ RView non ha 5 elementi? In tal caso si accede a indici di array non definiti (che possono o meno mostrare un errore). Modificalo in un ciclo foreach: ad es.
    foreach ($Rview as $prod) echo $prod['Name']...

Dovrebbe funzionare dopo aver apportato queste modifiche. Tuttavia potresti voler ripulire un po 'lo stile di codifica :)


EDIT: Oh, vedo, quando si fa riferimento alla matrice nel ciclo for non si sa che la matrice ha " ProdID " e " Nome " indici. Quando crei un array devi definire gli indici usando = & Gt; operatore.

  • Aggiungi indici all'array quando array_unshift:
    array_unshift($RView, array("ProdID" => $row_rsProd["ProdID"], "Name"...))

  • Se row_rsProd non è troppo grande, puoi semplicemente virare l'intero row_rsprod su $ RView.
    quindi cambia array_unshift (...) in solo $RView[] = $row_rsProd
    In questo modo gli indici vengono conservati.

  • In alternativa puoi cambiare le indicazioni nel ciclo for affinché corrispondano. In questo momento l'array che si sposta su $ RView è basato su 0 - $ RView [0] [0] è l'ID prodotto per il primo prodotto, ecc.
    Quindi puoi cambiare le cose nel ciclo foreach in
    echo "<li>..." $prod[0] $prod[1] $prod[2]

Spero che ti aiuti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top