PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP Wordfunktion?



damogran
01-02-2006, 10:01
Hi,

ich suche nach einer Funktion in PHP die mir eine gewisses Wort ausgibt. Also sagen wir ich habe den String

Hallo mein Name ist Damogran

dann möchte ich nur das fünfte Worte haben (Damogran).

Unter REXX gibt es da einfach die Funktion WORD, aber leider nicht in PHP ^^

Gruß
Damo

undefined
01-02-2006, 11:38
Mit solchen Funktionen kann man dich unter PHP zuschmeissen ;)
Siehe Regexp und alle String Funktionen http://www.php.net/manual/de/ref.strings.php

damogran
02-02-2006, 09:45
danke :)

gruß damo

Romanday
02-02-2006, 10:47
Du kannst dein Problem auch flexibler mit einem Array lösen.

undefined
02-02-2006, 16:52
Du kannst dein Problem auch flexibler mit einem Array lösen.
:confused:

echo ereg_replace( ".*(Damogran).*", "\\1", "Hallo mein Name ist Damogran" );
Noch mehr Beispiele ;)

Romanday
02-02-2006, 17:23
:confused:

echo ereg_replace( ".*(Damogran).*", "\\1", "Hallo mein Name ist Damogran" );
Noch mehr Beispiele ;)

Ja, das Array Beispiel fehlt noch.;)

undefined
02-02-2006, 18:30
Es sollte eher eine Anspielung auf flexibler sein ;)

Giuly
03-02-2006, 05:30
$arr = split(" ", "Hallo mein Name ist Damogran");
print_r($arr);
/*
Array
(
[0] => Hallo
[1] => mein
[2] => Name
[3] => ist
[4] => Damogran
)
*/

Romanday
03-02-2006, 06:25
Es sollte eher eine Anspielung auf flexibler sein ;)

Ne, ich hatte bloß im ersten Moment auch ein REGEX im Kopf gehabt.:D



$a=explode(' ',$s);

undefined
03-02-2006, 09:02
Ihr werdet doch nicht bei einem Text von Din A4 Größe mit explode() oder split() Arbeiten? Das meinte ich mit elegant.
Dann würde euer Code in Wirklichkeit in etwa so aussehen.


$text = strip_tags( $text ); ## HTML Elemente entfernen die an Wortgrenzen stossen.
$arr = split(" ", $text); ## Splitten
if ( is_array( $arr ) ) {
$arr = array_unique( $arr ); ## Doppelter Müll kann weg
foreach ( $arr AS $v ) {
$v = trim( $v );
if ( $v == "Damogran" ) {
echo $v;
break;
}
}
}

undefined
03-02-2006, 09:36
PS: Wenn man mit Arrays Arbeiten möchte und vermeiden will das Punkte oder andere an Wortgrenzen stoßenden Zeichen nicht mit geliefert werden sollen ist word_count die Bessere Wahl.


$str = "Hallo mein Name ist Damogran.";
$arr = str_word_count( $str, 1 );
var_dump( "<pre>", $arr , "</pre>" );

Wobei auch hier wieder z.B. Bindestriche und Downspaces nicht berücksichtigt werden

Romanday
03-02-2006, 10:58
Ihr werdet doch nicht bei einem Text von Din A4 Größe mit explode() oder split() Arbeiten? Das meinte ich mit elegant.
Dann würde euer Code in Wirklichkeit in etwa so aussehen.


$text = strip_tags( $text ); ## HTML Elemente entfernen die an Wortgrenzen stossen.
$arr = split(" ", $text); ## Splitten
if ( is_array( $arr ) ) {
$arr = array_unique( $arr ); ## Doppelter Müll kann weg
foreach ( $arr AS $v ) {
$v = trim( $v );
if ( $v == "Damogran" ) {
echo $v;
break;
}
}
}


Ja das geht,

oder so:;)



echo $a[4];

undefined
03-02-2006, 13:04
Und woher weist du wo das Wort enthalten ist?
Ich würde Arrays nur zum Sortieren verwenden. Aber nicht wie in seiner Frage zu Wortfindung.
Zu viel Code - zu Anfällig - zu hoher Speicherbedarf

So etwas bekommst du mit einem Regexp Wesentlich schneller und sicherer hin.

Es gab für diese Geschichte auch mal eine Extension - das ist leider eingeschlaffen.

Giuly
03-02-2006, 13:38
Ihr werdet doch nicht bei einem Text von Din A4 Größe mit explode() oder split() Arbeiten? Das meinte ich mit elegant.
Dann würde euer Code in Wirklichkeit in etwa so aussehen.


$text = strip_tags( $text ); ## HTML Elemente entfernen die an Wortgrenzen stossen.
$arr = split(" ", $text); ## Splitten
if ( is_array( $arr ) ) {
$arr = array_unique( $arr ); ## Doppelter Müll kann weg
foreach ( $arr AS $v ) {
$v = trim( $v );
if ( $v == "Damogran" ) {
echo $v;
break;
}
}
}

Nein,

$arr = split(" ", $text);
if(is_numeric($v = array_search('Damogran', $array)))
echo $arr[$v];

undefined
03-02-2006, 14:06
Sind immernoch mehr Zeilen ;)PS: Schreibe deinen Code mal in PHP 5.1 und ein schraube das Error Reporting hoch ;)
Es fehlen auch jegliche Kontrollen für Wortgrenzen in deinem Code ;)

Romanday
03-02-2006, 14:36
Und woher weist du wo das Wort enthalten ist?
Ich würde Arrays nur zum Sortieren verwenden. Aber nicht wie in seiner Frage zu Wortfindung.
Zu viel Code - zu Anfällig - zu hoher Speicherbedarf

So etwas bekommst du mit einem Regexp Wesentlich schneller und sicherer hin.

Es gab für diese Geschichte auch mal eine Extension - das ist leider eingeschlaffen.

Ja,

Aber


Anfänger legen sich meist bei REGEX die Karten. Mit flexibel meinte
ich, das er mit einer 3 auch das vierte Wort finden kann. So bleibt die
Lust zum spielen erhalten.
Das würde zu weit führen (is mir auch zu aufwendig) einem Anfänger
zu erklären was die Maschine unter einem Wort versteht.

Hinzu kommt, das es doch ein schönes Beispiel ist, nicht immer zwingend
ein REGEX benutzen zu müssen.

Was nun von allen Varianten mit den Resourcen am sparsamsten umgeht,
habe ich noch nicht getestet.

Würde mich aber sehr interessieren, wer das mal beweist.