Fritz: Wörter in substr nicht zerhacken

Hallo,

heute mal nicht die Frage "wie mache ich ...", sondern "warum funktioniert meine Lösung"

Ich extrahiere einen Teilstring mit
$piece = substr($string,0,$lenght);
Das schneidet mir natürlich meinen String bei $lenght ab, ohne Rücksicht darauf, ob das letzte Wort dabei zerhackt wird.

Um das letzte Wort intakt zu lassen, hab ich jetzt folgendes snippet gefunden:
$piece2 = substr($piece, 0, strlen(strrchr($piece,32))*(-1));
und das funktioniert. Aber WARUM?
Kann mir das bitte jemand aufdröseln. Was macht "32"? und *(-1)? eine negative srtlen?
Ich würd halt gern wissen, was mein Code macht, vor ich ihn einsetze.

Gruß Fritz

--
ie:( br:> va:} ls:[ fo:| ss:{ de:] js:| ch:? zu:)
http://webdesign.weisshart.de
  1. Tach

    $piece2 = substr($piece, 0, strlen(strrchr($piece,32))*(-1));

    "Schneide mir aus $piece einen Teilstring heraus.
    Beginne dabei an der Stelle Null, und höre ein Zeichen vor (-1)  dem letzten Vorkommen (strrchr) des Leerzeichens (in der ASCII-Tabelle hat das die Nummer 32) auf."

    => q.e.d :)

    Siehe dazu
    http://www.phpcenter.de/de-html-manual/function.strrchr.html

    Grüße,
    Jörg

    1. echo $begrüßung;

      $piece2 = substr($piece, 0, strlen(strrchr($piece,32))*(-1));

      "Schneide mir aus $piece einen Teilstring heraus.
      Beginne dabei an der Stelle Null,

      Soweit richtig ...

      und höre ein Zeichen vor (-1)  dem letzten Vorkommen (strrchr) des Leerzeichens (in der ASCII-Tabelle hat das die Nummer 32) auf."

      ... doch das ist unvollständig oder nicht richtig erklärt (-1)

      strrchr liefert den Rest von $piece zurück, der mit dem letzten Vorkommen eines Leerzeichens beginnt. (Statt 32 hätte hier auch ' ' stehen können.) Von diesem Reststring wird die Länge mit strlen ermittelt und dieses Ergebnis durch Multiplikation mit -1 ( *(-1) ) in einen negativer Wert gewandelt - ein einfaches Minus vor dem strlen hätte es auch getan.

      Was der negative Wert in substr() bewirkt steht im Handbuch.

      Das ganze lässt sich auch leicht selbst nachvollziehen, wenn man die Teile aus der Formel von innen nach außen herausnimmt und sie einzeln ausführt.
      Hilfreich ist dabei var_dump(), weil damit der Typ und ggf. die Länge des Variableninhaltes angezeigt werden. Das kann einen vor falschen Schlüssen bewahren, wenn man bei der Ausgabe im Browser nicht beachtet, dass dieser bestimmte Eigenheiten bei der Ausgabe hat. Z.B. werden mehrere white space-Zeichen zusammengefasst.

      echo "$verabschiedung $name";

      1. Hallo dedlfix,

        Super Erklärung. danke

        Gruß Fritz

        --
        ie:( br:> va:} ls:[ fo:| ss:{ de:] js:| ch:? zu:)
        http://webdesign.weisshart.de