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>";
    }
    ?>
War es hilfreich?

Lösung

Es ist mehr oder weniger direkt - nur 2 Zeilen geändert werden müssen

.
  1. Es gibt keine Notwendigkeit für den zusätzlichen Array () um array_unshift und array_pop.
  2. 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,...))
  3. 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!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top