Index 0 aus array entfernen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Index 0 aus array entfernen?

    Hallo,

    Ich möchte per echo den inhalt aller array-elemente ausgeben, ausser dem ersten elemend - index 0

    Das habe ich so gemacht:
    PHP-Code:
    foreach($arr as $line)
     {
    $zt=explode("|",trim($line));
      echo 
    "<br />".$zt[1]."|".$zt[2]."|".$zt[3]."|".$zt[4]."|".$zt[5];
     } 
    Irgendwie sagt mir mein gefühl das man das kürzer schreiben kann.
    Geht das oder muß die ECHO-Zeile so lang sein?
    ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

  • #2
    PHP-Code:
    foreach ($arr as $line) {
        echo 
    "<br />" trim(substr($linestrpos($line"|")));

    Zuletzt geändert von h3ll; 02.07.2009, 13:23.

    Kommentar


    • #3
      array_shift() und implode() könnten helfen.

      Alternativ:
      strpos() und substr()
      Wir werden alle sterben

      Kommentar


      • #4
        Danke h3ll

        Bei dir ist noch'n kleiner schönheitsfehler drin, der string befinnt mit einm | der dort weg sollte.


        ...aber ich hatte selber eine zündende idee, und zwar beinhaltet index 0 eine timestamp und ist somit immer gleich lang, habe jetzt das hier angewendet

        echo "<br />".trim(substr($line,11));

        das funktioniert sehr gut.
        ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

        Kommentar


        • #5
          Zitat von RamonaS Beitrag anzeigen
          Danke h3ll

          Bei dir ist noch'n kleiner schönheitsfehler drin, der string befinnt mit einm | der dort weg sollte.
          Dann erhöhe den Wert des Offsets um 1.

          Kommentar


          • #6
            Jetzt wirds peinlich hier:-)

            >Dann erhöhe den Wert des Offsets um 1.
            Was ist das denn wieder....Offsets kenn ich nur von meinen fehlermeldungen, wenn ich mit einem array was anstelle bis nix mehr geht:-)
            ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

            Kommentar


            • #7
              Zitat von RamonaS Beitrag anzeigen
              Jetzt wirds peinlich hier:-)

              >Dann erhöhe den Wert des Offsets um 1.
              Was ist das denn wieder....Offsets kenn ich nur von meinen fehlermeldungen, wenn ich mit einem array was anstelle bis nix mehr geht:-)
              Ich meine die Startposition von substr():

              PHP: substr - Manual

              Kommentar


              • #8
                Zitat von RamonaS Beitrag anzeigen
                Jetzt wirds peinlich hier:-)
                Ja - weil du dich jetzt schon zum wiederholten Male darauf hinweisen lässt, bitte die [quote]-Tags zu nutzen, wenn du aus einem Vorposting zitierst!
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Dabei genügt es schon, einfach auf den "Zitieren"-Button zu drücken.

                  Zitat von RamonaS Beitrag anzeigen
                  ...aber ich hatte selber eine zündende idee, und zwar beinhaltet index 0 eine timestamp und ist somit immer gleich lang, habe jetzt das hier angewendet

                  echo "<br />".trim(substr($line,11));
                  Wer sagt, dir dass ein Timestamp immer eine Zahl mit elf Ziffern ist?

                  PHP-Code:
                  echo date('Y-m-d H:i:s'1000000000), $lf;
                  // gibt: 2001-09-09 03:46:40 (für CET) 
                  Also schneidet dein Script bei Daten vor dem 9. September ein Zeichen zu viel ab.
                  Ich kann mir allerdings deine Antwort auf dieses Argument schon denken ...


                  das funktioniert sehr gut.
                  Das liegt im Auge des Betrachters, ich würde einen Einzeiler vorziehen.

                  PHP-Code:
                  $zt 'a|b|c|d|e';
                  $lf '<br />';

                  // die unvermeidliche preg_replace()-Lösung: B-)
                  echo preg_replace('/\A[^|]*\|/'''$zt), $lf
                  Der passt auch noch, wenn sich das Format des zu entfernenden Teils einmal ändert, weil keine feste Länge angenommen, sondern nach dem Trennzeichen gesucht wird. Man kann das natürlich auch mit strpos() und substr() nachbauen ...

                  Die Standard-Stringfunktionen von PHP haben das Problem, dass sie das erste Trennzeichen leider immer stehen lassen:

                  PHP-Code:
                  echo strstr($zt'|'), $lf;
                  echo 
                  strpbrk($zt'|'), $lf
                  Eine interessante Lösung wäre auch noch die mit preg_split(), aber man muss dazu dann noch list() bemühen. Eleganten Quellcode zu schreiben, ist halt in PHP nicht wirklich drin:
                  PHP-Code:
                  // preg_split(,$zt, 2) teilt $zt nur einmal (in [b]2[/b] Teile),
                  // list (, $out) verwirft den ersten gleich wieder
                  list (, $out) = preg_split('/\|/'$zt2);
                  echo 
                  $out$lf
                  Eventuell geht das auch mit explode() -- ich war zu faul, es zu testen.

                  Ein (in PHP zumindest bis 5.2.x nicht möglicher) Einzeiler wäre:
                  PHP-Code:
                  echo (preg_split('/\|/'$zt2))[1], $lf
                  In anderen Script-Sprachen geht sowas.
                  Zuletzt geändert von fireweasel; 03.07.2009, 11:44.
                  Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                  Kommentar


                  • #10
                    Zitat von fireweasel Beitrag anzeigen

                    Also schneidet dein Script bei Daten vor dem 9. September ein Zeichen zu viel ab.
                    Ich kann mir allerdings deine Antwort auf dieses Argument schon denken ...

                    // die unvermeidliche preg_replace()-Lösung: B-)
                    echo preg_replace('/\A[^|]*\|/', '', $zt), $lf;
                    Naja, ich hab eigentlich keine daten von der zeit als timestamp noch kürzer als 10 zeichen war

                    ...aber ich werde die "unvermeidliche preg_replace()-Lösung" von dir zum einsatz bringen.

                    Ich muß dir allerdings gestehen, die regex sind für mich noch viel schlimmer als mit arrays rum zu handieren. Ich lass die dann gleich so denn wenn ich da dran fummel tut sie garantiert nicht mehr.

                    Ok danke für den hinweiß ich werde das dann einbauen.
                    ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

                    Kommentar


                    • #11
                      @fireweasel

                      So ich hab das jetzt so gemacht:
                      PHP-Code:
                      if(isset($_GET['uo']) and $_GET['uo']=="s"# Link wurde geklickt
                       
                      {echo "<br /><br />";
                        
                      $arr=explode("\n",file_get_contents($_SERVER["DOCUMENT_ROOT"]."/useronline.txt"));
                        foreach(
                      $arr as $line)
                         {echo 
                      "<br />".preg_replace('/\A[^|]*\|/','',$line),"\n";} # Ganze Zeile anzeigen, ausser Arayy Index 0
                       
                      }
                      else
                       {echo 
                      "<a href='".$_SERVER['PHP_SELF']."?uo=s'>(".$all.")</a>";}

                      unset(
                      $dx,$arr,$line,$zt); 
                      Würdest du sagen das dieser scriptteil jetzt perfekt ist oder nur zu 100% ok?
                      Für änderungsvorschläge hab ich immer ein offenes auge.


                      ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

                      Kommentar


                      • #12
                        Nein, das ist nicht schön!
                        1. witzig eingerückt! (kaum lesbar)
                        2. PHP_SELF ermöglicht u.U. XSS Attacken
                        3. Wozu das unset() ?
                        Wir werden alle sterben

                        Kommentar


                        • #13
                          1. Viel kürzer von der Textlänge ist das jetzt auch nicht.
                          2. Übersichtlicher ist es auch sicher nicht.
                          3. Schneller schon gar nicht.
                          Warum also sowas?

                          Kommentar


                          • #14
                            Zitat von RamonaS Beitrag anzeigen
                            ...aber ich werde die "unvermeidliche preg_replace()-Lösung" von dir zum einsatz bringen.
                            Das ist in so einem simplen Fall keine gute Idee.

                            explode leistest hier ganz simpel das gewünschte.
                            Reguläre Ausdrücke sind i.a.R. kostenintensiver als einfache Stringfunktionen.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Zitat von combie Beitrag anzeigen
                              Nein, das ist nicht schön!
                              1. witzig eingerückt! (kaum lesbar)
                              2. PHP_SELF ermöglicht u.U. XSS Attacken
                              3. Wozu das unset() ?
                              zu 2:
                              Was macht ihr da an stelle von PHP_SELF ? Das soll halt flexibel sein, wird im footerbereich eigeblendet auf jeder seite, also kann ich da kein festen dateinamen einsetzen.

                              zu 3:
                              Damit ich auch sicher bin das die varablen/arrays sich nicht addieren oder sowas in der art.

                              Wie würdest du dieses script schreiben wenn es deins wäre?
                              ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

                              Kommentar

                              Lädt...
                              X