PHP: Sessione array bidimensionale - Traccia prodotti visualizzati
-
03-07-2019 - |
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>";
}
?>
Soluzione
È più o meno giusto - solo 2 linee devono essere cambiate.
- Non è necessario l'array extra () attorno a array_unshift e array_pop.
- 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,...))
- 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!