analogbernd: nur die letzten 3 bei foreach

Hallo,

trotz meiner geringen PHP-Kenntnisse konnte ich mir mit einigem "belesen" folgenden Code zusammenbasteln.

Auszug:

$rss = fetch_rss($url);  
foreach ( $rss->items as $item ) {  
    $published = parse_w3cdtf($item['dc']['date']);  
    if ( $published <= $date ) {  
       echo "<a href='" . $item['link'] . "'>" . $item['title'] . "</a>";  
echo "<br><br>";  
       echo $item[description];  
echo"<br>";  
echo  "Datum:" . substr($item[pubdate], 5, 12);  
echo"<br>";  
echo "<p>";  
    }  
}

Ziel des Ganzen ist die Übernahme des Blog-Feeds in eine andere Webseite. Das funktioniert auch prima. Genauso wie ich es mir gewünscht habe, aber ich benötige nur die letzten 3-5 Blogartikel. Wie kann ich das erreichen?

In der Vorlage für diesen Schnipsel war das auf diese Art gelöst:

$items = array_slice($rss->items, 0, $num_items);

und stattdessen:

foreach ( items as $item ) {....usw

Warum auch immer funktionierte das leider nicht. Ob es an meinen PHP-Einstellungen liegt, weiß ich nicht. Ich kann diese leider nicht beeinflussen. (Shared)

Aber vielleicht lässt sich obiger Codeschnipsel anpassen? Jemand eine Idee dazu?

Vielen Dank.

  1. Hallo!

    foreach ( items as $item ) {....usw

    Ist nach allgemeinem Ermessen wohl ein Fehler, soweit es PHP betrifft, denn Variablen ohne vorgestelltes "$" sind darin verboten.

    Gruß, LX

    --
    X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: Unusual
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo!

      foreach ( items as $item ) {....usw
      Ist nach allgemeinem Ermessen wohl ein Fehler, soweit es PHP betrifft, denn Variablen ohne vorgestelltes "$" sind darin verboten.

      Gruß, LX

      Vielen Dank fürs Augen öffnen. Das war der richtige Weg. Da hab ich beim ändern wohl das "$" gelöscht ;)

      Danke

  2. Hello,

    ohne, dass ich mir näher anschaue, um was es geht...

    Zur einer Aufgabenstellung:
       Wie bekommt man die letzten Drei Einträge aus einem _assoziativen_ Array in PHP?

    Man drehe das Array um
    http://www.php.net/manual/de/function.array-reverse.php

    baue eine foreach()-Schleife auf
    http://www.php.net/manual/de/control-structures.foreach.php

    Kopiere die Treffer (Keys reicht vollkommen) in ein neues Array

    lasse einen Zähler mitlaufen
    und breche mit dessen Hilfe die foreach()-Schliefe nach der gewünschten Anzahl ab

    Drehe das Indexarray auch wieder um

    und nimm es in einer weiteren foreach()-Schleife als Index-Register für den Zugriff auf das Original-Array.

    Alternativ kann man das Ganze auch mit Array_pop
    http://www.php.net/manual/de/function.array-pop.php

    oder mit Array_slice
    http://www.php.net/manual/de/function.array-slice.php

    versuchen.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo

      oder mit Array_slice http://www.php.net/manual/de/function.array-slice.php versuchen.

      Ich denke, dass diese Lösung mit einer vorhergehenden Prüfung, ob das Array mehr als 5 Elemente hat, die einfachste wäre. Keine Schleife, keine Prüfung in der Schleife ...

      $anzahl_eintraege = 5;  
        
      if (count($array)>$anzahl_eintraege) {  
      $array = array_slice($array,-$anzahl_eintraege);  
      }
      

      Tschö, Auge

      --
      Die deutschen Interessen werden am Liechtenstein verteidigt.
      Veranstaltungsdatenbank Vdb 0.2
      1. Hello,

        oder mit Array_slice http://www.php.net/manual/de/function.array-slice.php versuchen.

        Ich denke, dass diese Lösung mit einer vorhergehenden Prüfung, ob das Array mehr als 5 Elemente hat, die einfachste wäre. Keine Schleife, keine Prüfung in der Schleife ...

        $anzahl_eintraege = 5;

        if (count($array)>$anzahl_eintraege) {
        $array = array_slice($array,-$anzahl_eintraege);
        }

          
        Ich habe es extra nicht in den Vordergrund gestellt, weil man sich bei älteren PHP-Versionen eben noch selber helfen muss:  
          
                     "Beachten Sie, dass array\_slice() nach Vorgabe numerische Schlüssel  
                      des Arrays zurücksetzt. Seit PHP 5.0.2 können Sie dieses Verhalten  
                      ändern, indem Sie preserve\_keys  auf TRUE setzen."  
          
        Das wäre dann bei einem Array, dessen Schlüssel man im Originalzustand benötigt, weil z.B. die IDs der Datensätze drinstehen, ein KO-Kriterium für ein Array-slice auf einem älteren PHP.  
          
          
          
        Liebe Grüße aus Syburg bei Dortmund  
          
        Tom vom Berg  
        ![](http://selfhtml.bitworks.de/Virencheck.gif)  
          
        
        -- 
        Nur selber lernen macht schlau  
        <http://bergpost.annerschbarrich.de>
        
        1. Hallo

          Ich denke, dass diese Lösung mit einer vorhergehenden Prüfung, ob das Array mehr als 5 Elemente hat, die einfachste wäre. Keine Schleife, keine Prüfung in der Schleife ...

          $anzahl_eintraege = 5;

          if (count($array)>$anzahl_eintraege) {
          $array = array_slice($array,-$anzahl_eintraege);
          }

          
          >   
          > Ich habe es extra nicht in den Vordergrund gestellt, weil man sich bei älteren PHP-Versionen eben noch selber helfen muss:  
          >   
          >              "Beachten Sie, dass array\_slice() nach Vorgabe numerische Schlüssel  
          >               des Arrays zurücksetzt. Seit PHP 5.0.2 können Sie dieses Verhalten  
          >               ändern, indem Sie preserve\_keys  auf TRUE setzen."  
          >   
          > Das wäre dann bei einem Array, dessen Schlüssel man im Originalzustand benötigt, weil z.B. die IDs der Datensätze drinstehen, ein KO-Kriterium für ein Array-slice auf einem älteren PHP.  
            
          Woher stammen denn die Schlüssel? Entweder sie sind mit dem Eintrag fest verknüpft, also mitgespeichert und somit ein Feld des Arrays, dann ist das auch kein Problem, oder sie sind, wie im Falle des Auslesens der Datei mit [file](http://www.php.net/file), nutzlos, da sie sich verändern, sobald ein Eintrag aus der Datei gelöscht wird. Dessen sollte man sich bewusst sein, was dann bedingt, dass man, um die Anzeige der Datensätze zu steuern, den Datensätzen ein weiteres Feld für die Anzeige oder Sperrung verpasst.  
            
          Tschö, Auge  
          
          -- 
          Die deutschen Interessen werden am Liechtenstein verteidigt.  
            
          [Veranstaltungsdatenbank Vdb 0.2](http://termindbase.auge8472.de/)
          
          1. Hello,

            Ich habe es extra nicht in den Vordergrund gestellt, weil man sich bei älteren PHP-Versionen eben noch selber helfen muss:

            "Beachten Sie, dass array_slice() nach Vorgabe numerische Schlüssel
                          des Arrays zurücksetzt. Seit PHP 5.0.2 können Sie dieses Verhalten
                          ändern, indem Sie preserve_keys  auf TRUE setzen."

            Das wäre dann bei einem Array, dessen Schlüssel man im Originalzustand benötigt, weil z.B. die IDs der Datensätze drinstehen, ein KO-Kriterium für ein Array-slice auf einem älteren PHP.

            Woher stammen denn die Schlüssel?

            die stammen z.B. aus einer Datenbank.
            Ich habe ausdrücklich geschrieben:
                "ohne, dass ich mir näher anschaue, um was es geht..."

            und mich nur auf die Aufgabe bezogen:
                "Wie bekommt man die letzten Drei Einträge aus einem _assoziativen_ Array in PHP?"

            Und da spielt es eben eine Rolle, ob (assoziative) Schlüssel numerische Werte sind, oder nicht. Die werden nämlich dann leider in numerische Schlüssel umgewandelt und veschwinden somit bei den älteren Versionen von array_slice()

            Auf mehr wollte ich hier gar nicht hinaus.

            Liebe Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hallo

              die stammen z.B. aus einer Datenbank.
              Ich habe ausdrücklich geschrieben:
                  "ohne, dass ich mir näher anschaue, um was es geht..."

              und mich nur auf die Aufgabe bezogen:
                  "Wie bekommt man die letzten Drei Einträge aus einem _assoziativen_ Array in PHP?"

              Und da spielt es eben eine Rolle, ob (assoziative) Schlüssel numerische Werte sind, oder nicht. Die werden nämlich dann leider in numerische Schlüssel umgewandelt und veschwinden somit bei den älteren Versionen von array_slice()

              Auf mehr wollte ich hier gar nicht hinaus.

              Ähhm, da habe ich dich falsch verstanden, sorry.

              Tschö, Auge

              --
              Die deutschen Interessen werden am Liechtenstein verteidigt.
              Veranstaltungsdatenbank Vdb 0.2
              1. Hello,

                Ähhm, da habe ich dich falsch verstanden, sorry.

                Macht ja nix, denn die Problematik in der XML-Augabe von analogbernd ist ja trotzdem nicht unbedingt gelöst. Sie scheint mir aber ungenügend beschrieben zu sein.

                Liebe Grüße aus Syburg bei Dortmund

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de