Sascha: strstr, Problem, schneiden alles weg weg kein Zeichen da ist

Ich möchte einen String ab einer bestimmten länge abschneiden.

$sting='hallo was ist # da los';

strstr($string, '#', true)

das klappt, nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?

Sascha

  1. Lieber Sascha,

    $sting='hallo was ist # da los';

    strstr($string, '#', true)

    [...] nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?

    Du kannst das verhindern, indem Du vorher nachzählst, wieviele # im String vorkommen. Nur wenn es mehr als 0 sind, benutzt Du Deinen obigen Code.

    Liebe Grüße,

    Felix Riesterer.

    --
    "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
    1. Hallo,

      Du kannst das verhindern, indem Du vorher nachzählst, wieviele # im String vorkommen. Nur wenn es mehr als 0 sind, benutzt Du Deinen obigen Code.

      oder alternativ, ob überhaupt eins vorkommt.

      vg ichbinich

      --
      Kleiner Tipp:
      Tofu schmeckt am besten, wenn man es kurz vor dem Servieren durch ein saftiges Steak ersetzt...
      1. Lieber ichbinich,

        oder alternativ, ob überhaupt eins vorkommt.

        und Du glaubst, dass der OP bei seinem jetzigen Wissensstand den Unterschied zwischen 0 und false korrekt prüfen kann? Auch wenn nach dem vom OP beschriebenen Szenario das gesuchte Zeichen kaum am Anfang stehen wird...

        Liebe Grüße,

        Felix Riesterer.

        --
        "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
  2. Hello,

    Ich möchte einen String ab einer bestimmten länge abschneiden.

    $sting='hallo was ist # da los';

    strstr($string, '#', true)

    das klappt, nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?

    Alternativ kannst Du auch explode() benutzen
    http://de2.php.net/manual/en/function.explode.php

    und nicht nach sting, sondern nach springsteen suchen :-)

    Je nachdem, ob Du nun nur den Teil ab dem letzten Vorkommen des Suchzeichens oder ab der ersten Position, o. auch anders, haben willst, nimmst Du entsprechend viele Arrayelemente des Ergebnisarrays wieder hinzu.

    mit array_pop() kannst Du den Teil nach dem letzten Vorkommen, respektive den gesamten String, wenn das Zeichen gar nicht vorkam, erwarten.
    http://de2.php.net/manual/en/function.array-pop.php

    Wenn Du array_shift() auf das Ergebnisarray anwendest
    http://de2.php.net/manual/en/function.array-shift.php
    hast Du den Stringteil _vor_ dem ersten Vorkommen.

    Wenn Du dem Ergebnisarray mit array_shift() das erste Element klaust und in den Mülleimer schmeißt, den Rest des Ergebnisarrays dann mit implode() wieder zusammenbaust, erhältst
    Du den String _nach_ dem ersten Vorkommen,
    http://de2.php.net/manual/en/function.implode.php

    usw.

    ---------#----------#----------#----------

    $teile = explode('#', $string);

    [---------] [----------] [----------] [----------]

    $ende = array_pop($teile);

    ----------

    [---------] [----------] [----------] [----------]
    [$trash = ] array_pop($teile);
    [---------] [----------] [----------]
    $vor_dem_letzten = implode('#', $teile);

    ---------#----------#----------

    [---------] [----------] [----------] [----------]
    $anfang = array_shift($teile);

    ---------

    [---------] [----------] [----------] [----------]
    [$trash = ] array_shift($teile);
                [----------] [----------] [----------]
    $nach_dem_ersten = implode ('#',$teile);
                 ----------#----------#----------

    Du siehst, dass man für die Teilung von Zeichenketten mit explode und den Array-Funktionen
    * array_pop()
    * array_shift()
    * implode

    eine Menge erreichen kann.

    Denke nur vorher immer darüber nach, ob _Zeichenzählung_ in Frage kommt, denn dann muss sofort die Warnlampe für die Frage: Single-Byte-Codierung oder Multi-Byte-Codierung (z. B. UTF-8)? aufleuchten!

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    Die ultimative Seite für Selbermacher
  3. Tach!

    Ich möchte einen String ab einer bestimmten länge abschneiden.
    $sting='hallo was ist # da los';
    strstr($string, '#', true)
    das klappt, nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?

    Wenn das # nicht gefunden wird, ist das Ergebnis false. Damit liefert

    strstr($string, '#', true) or $string;

    den gesuchten Teil oder alles. Wenn der Teilstring auch ein Leerstring oder '0' sein kann, dann braucht der Teil vor dem or einen expliziten Test auf false

    (strstr($string, '#', true) === false) or $string;

    Das äußere Klammernpaar ist nicht notwendig, verdeutlicht aber was zusammengehört.

    dedlfix.

  4. Hi,

    Ich möchte einen String ab einer bestimmten länge abschneiden.

    $sting='hallo was ist # da los';

    strstr($string, '#', true)

    das klappt, nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?

    Kurz Hirn benutzen: Indem du, egal ob eins drin ist oder nicht, ein # hinten dran hängst …

    strstr($string . '#', '#', true)

    MfG ChrisB

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    1. Lieber ChrisB,

      Kurz Hirn benutzen: [...]

      +1

      Liebe Grüße,

      Felix Riesterer.

      --
      "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
    2. Hallo,

      $sting='hallo was ist # da los';

      ...

      Kurz Hirn benutzen: Indem du, egal ob eins drin ist oder nicht, ein # hinten dran hängst …

      strstr($string . '#', '#', true)

      im Prinzip schöne Idee, das Ergebnis ist dann aber "# da los#". Man muss dann das # wieder abschneiden.

      Gruß
      Kalk

      1. Tach!

        $sting='hallo was ist # da los';
        strstr($string . '#', '#', true)
        im Prinzip schöne Idee, das Ergebnis ist dann aber "# da los#". Man muss dann das # wieder abschneiden.

        Ja, aber nur, wenn man nicht true sondern false als dritten Parameter angibt.

        dedlfix.

        1. Hallo,

          Ja, aber nur, wenn man nicht true sondern false als dritten Parameter angibt.

          hrmpf, da war ich wohl zu voreilig. :(

          Gruß
          Kalk

          1. Hello,

            Hallo,

            Ja, aber nur, wenn man nicht true sondern false als dritten Parameter angibt.

            hrmpf, da war ich wohl zu voreilig. :(

            Den Parameter gibt's ja auch erst seit PHP Version 5.3.0
            Ist also noch recht frisch.

            Solche Änderungen bekommt man nicht unbedingt gleich mit.

            Das bringt mich zu einer Frage:
            Die Änderungsprotokolle sind mir immer zu mühselig, obwohl man sie eigentlich lesen müsste.
            Aber gibt es vielleicht eine Liste der Funktionen mit Angabe, ob sich darin etwas geändert hat?

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            Die ultimative Seite für Selbermacher
            1. Tach!

              Die Änderungsprotokolle sind mir immer zu mühselig, obwohl man sie eigentlich lesen müsste.
              Aber gibt es vielleicht eine Liste der Funktionen mit Angabe, ob sich darin etwas geändert hat?

              Hmm, hab ich dir das nicht neulich schon mal geantwortet? Im PHP-Handbuch gibts im Anhang die Migrations-Abschnitte. Da ist alles in gut lesbarer Form aufgeführt.

              dedlfix.

              1. Hello,

                Die Änderungsprotokolle sind mir immer zu mühselig, obwohl man sie eigentlich lesen müsste.
                Aber gibt es vielleicht eine Liste der Funktionen mit Angabe, ob sich darin etwas geändert hat?

                Hmm, hab ich dir das nicht neulich schon mal geantwortet? Im PHP-Handbuch gibts im Anhang die Migrations-Abschnitte. Da ist alles in gut lesbarer Form aufgeführt.

                Dann habe ich das leider vergessen.

                Aber http://de2.php.net/manual/en/migration53.parameters.php ist das, was ich suchte.

                Danke.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                Die ultimative Seite für Selbermacher
  5. Hallo,

    Ich möchte einen String ab einer bestimmten länge abschneiden.

    diese Beschreibung passt nicht so ganz...

    $sting='hallo was ist # da los';

    strstr($string, '#', true)

    das klappt, nur wenn kein # im string ist, wir der ganze Sting weggeschnitten, wie kann ich das verhindern?

    ... auf diesen Code und diese Problembeschreibung.

    Was genau ist das Kriterium, wo geschnitten werden soll und welchen Teil genau möchtest du übrig behalten?

    Gruß
    Kalk