PHP: Session 2-Dimensional Array - Oberbau angesehene Produkte
-
03-07-2019 - |
Frage
Ich versuche, um ein Array zu erstellen, um die letzten 5 Produkte ein Kunde angesehen hat angezeigt werden soll.
Das Array ist ein 2-dimensionales Array wie unten ...
$ RView = array ( Array (ID => "1001", RefCode => "Ref_01" Name => "Name_01"), ... Array (ID => "1005", RefCode => "Ref_05" Name => "Name_05") );
Die Array-Werte werden aus dem Produkte-Cord abgerufen und ist so konzipiert, funktioniert wie folgt, wenn ein Kunde eine Produktseite besucht.
- Seite prüft, ob eine Session Array existiert
- Wenn ja, ein Array-Variable wird aus bestehenden Session
erstellt Wenn nein, ein neues Array erstellt wird. - Array wird die neuen Produktdetails hinzuzufügen.
- Array wird zählen, wenn es mehr als 5 bestehende Produkte im Array.
- Wenn ja, wird es die älteste entfernen.
Wenn nein, geht zum nächsten Schritt. - Eine Sitzung wird erstellt / aus dem überarbeiteten Array aktualisiert.
Mein aktueller Aufwand angebracht ist unten ...
Vielen Dank für jede Hilfe.
<?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>";
}
?>
Lösung
Es ist mehr oder weniger direkt - nur 2 Zeilen geändert werden müssen
.- Es gibt keine Notwendigkeit für den zusätzlichen Array () um array_unshift und array_pop.
- Wenn Sie array_unshift Sie ein Array von Elementen (nicht die id / Codes einzeln) sind drängen - ich denke du meinst
array_unshift($RView, array($prodid,$name,...))
- Was passiert, wenn $ RView hat keine 5 Elemente? In diesem Fall sind der Zugriff auf Sie undefined Array-Indizes (die keinen Fehler zeigen können oder nicht). Ändern Sie ihn auf einer foreach-Schleife: z
foreach ($Rview as $prod) echo $prod['Name']...
Es sollte funktionieren, nachdem Sie diese Änderungen vornehmen. Sie könnten die Codierung Stil ein wenig aufzuräumen wollen, aber:)
EDIT: Oh, ich sehe, wenn Sie das Array in der for-Schleife sind Referenzierung es nicht weiß, dass das Array „ProdID“ und „Name“ Indizes hat. Wenn Sie einen Array machen müssen Sie die Indizes definieren den Operator =>.
-
In Indizes auf das Array, wenn Sie array_unshift:
array_unshift($RView, array("ProdID" => $row_rsProd["ProdID"], "Name"...))
-
Wenn row_rsProd nicht zu groß ist, können Sie einfach das gesamte row_rsprod auf $ RView heften.
so ändern array_unshift (...) nur$RView[] = $row_rsProd
Auf diese Weise die Indizes werden beibehalten. - Alternativ können Sie die indicies in der passend für Schleife ändern. Im Augenblick ist die Array, das Sie auf $ RView unshift ist 0-basiert - $ RView [0] [0] ist die Produkt-ID für das erste Produkt, usw.
So können Sie das Zeug in der foreach-Schleife ändern
echo "<li>..." $prod[0] $prod[1] $prod[2]
Ich hoffe, das hilft!