PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : In Variable "Teiltext" vergleichen


Geri
02.02.2004, 14:51:35
Hallo zusammen.

Ich habe eine Variable z.b: $nr='04COO4'
Eine andere Lautet: $nr='04LD1.1..etc.

Nun möchte ich per PHP alle Variablen die den Kürzel COO enthalten separieren, ich kenne aber den PHP Befehl nicht.
So habe ich es Probiert, funktioniert aber nicht:
if ($nr == '%COO%'){
echo "Mach dies";
}
else{
echo "Mach jenes";
}

Mit SQL benützt man die Abfrage LIKE, dies funtkioniert mir aber hier in diesem Fall nicht.

Kann ich überhaupt diese Abfrage machen? Ich hoffe Ihr versteht mich...*gg

Besten Dank für jeden Hinweis.

gz

feuervogel
02.02.2004, 14:57:53
ja kannst du, was du brauchst ist eine preg-abfrage




if (preg_match( "/.*COO.*/U" , $nr ) ) {
echo "Mach dies";
}
else{
echo "Mach jenes";
}


müsste hinhauen, schau mal da:

http://tut.php-q.net/regex.html

edit: ja geht, aber dann muss "COO" groß geschrieben sein.

Yzerman
02.02.2004, 14:58:50
Mal ne Verständnisfrage: wie kann die gleiche Variable zwei verschiedene Werte haben? Oder ist $nr ein Array?

feuervogel
02.02.2004, 15:02:37
@yzerman


foreach( $numbers as $key => $nr )
{
if (blablalab)
{

echo $nr;

}
}

Geri
02.02.2004, 15:14:57
Danke Feuervogel

mit preg_match klappt es bereits wunderbar.

Yzerman
02.02.2004, 15:18:06
achso, danke ;-)

preg_match funktioniert natürlich, würde aber in diesem einfachen Such-Fall lieber auf Stringfuntionen (strpos, strstr) zurückgreifen, da diese schneller und resourcenschonender sind.

feuervogel
02.02.2004, 15:21:51
okay, stimmt...wenn man einfach nur überprüfen will, ob ein string in dem andern enthalten ist...

flobee
03.02.2004, 10:42:40
Original geschrieben von Yzerman
würde aber in diesem einfachen Such-Fall lieber auf Stringfuntionen (strpos, strstr) zurückgreifen, da diese schneller und resourcenschonender sind.
kannst du mir ein beispiel zeigen? ich suche gerade ob es vielleicht einen befehl gibt der das mysql LIKE für php macht und komme nicht so ganz auf den trichter wie ich die ähnlichkeiten 2er stings zurück erhalte...
gruß flobee

Yzerman
03.02.2004, 10:53:56
strstr ($string,$suchstring) ? echo 'Teilstring enthalten' : echo 'Teilstring nicht enthalten';

feuervogel
03.02.2004, 10:55:16
also like kannst du mit meiner lösung machen. wie gesagt: regexp!

und ob zwei strings "ähnlich" klingen, das ist noch mal ein ganz anderes kapitel!!!

Yzerman
03.02.2004, 11:03:23
Ich verstehe immer noch nicht, warum Du hier unbedingt mit RegEx's arbeiten willst. Soweit ich weiß, macht dieses LIKE '%string%' in MySQL auch nichts anderes, als zu prüfen, ob der Teilstring 'string' in irgendeinem Feld vorhanden ist.
PHP-adäquat reicht dazu die strstr-Funktion (oder halt stristr, wenn nicht case-sensitive gesucht werden soll)

flobee
03.02.2004, 11:25:17
hmm.. danke schon mal! hab wohl falsch gefragt!
noch mal neu:
ich möchte herausfinden ob z.b. mind 3 zeichen (bzw. 1,2 od n zusammenhängende zeichen) im string "username" sich auch im string "passwort" befinden

also "use", "ser", "ern" , "rna", "nam"

da wird mir die regex nicht wirklich helfen oder?

Yzerman
03.02.2004, 11:41:18
Das kannst Du mit einer Schleifenstruktur lösen.
Du kannst Dir mit substr die einzelnen gewünschten Teilstrings nacheinander aus dem Usernamen ziehen und überprüfen, ob der sich im Passwort befindet.

flobee
03.02.2004, 12:21:50
ok, wie siehts aus? geht das hier auch schneller, performanter?
function _my_str_check($haystack, $needle, $depth=1) {

$depth = intval($depth) == 0 ? 1 : intval($depth);

$parts = round( strlen( $haystack ) );

for($i=0; $i < $parts ; $i++) {

$part = substr($needle, ( $i * $depth) , $depth);
// testing
echo $part .',';
if( strstr($haystack, $part) ) {
return TRUE;
break;
}

}

return false;
}

if( !_my_str_check($haystack='password', $needle='username', $depth=2)) echo 'not ';
echo 'found';

Yzerman
03.02.2004, 12:49:07
Ich würde es so machen:


function checkstr ($string1,$string2,$depth) {
$res=FALSE;
for ($i=0; $i<(strlen ($string1)-$depth); $i++) {
if (strstr ($string2,substr ($string1,$i,$depth))) {
$res=TRUE;
break;
}
}
return $res;
}

flobee
03.02.2004, 13:04:54
also davon abgesehen das beide versionen nicht genau sind schneidest du ggf den treffer ab was aber nicht so sein sollte! :-)

Yzerman
03.02.2004, 14:14:40
Wieso dieses? Meine Funktion nimmt jeden möglichen Teilstring aus $string1 mit der Länge $depth und prüft, ob dieser so in $string2 vorhanden ist. Wenn das für irgendeinen Teilstring zutrifft, liefert die Fkt. TRUE, ansonsten FALSE zurück.

Wenn ich die Fragestellung richtig verstanden habe, ist das die Lösung.

flobee
03.02.2004, 14:33:10
ja, ich hatte bei mir einen fehler der bei dir richtig ist, aber du schneiderst die schleife hinten ab :-(
$i<(strlen ($string1)-$depth); ... sonnst gibts fehler! if $string1 <= 1

ausserdem sollte geprüft werden ob string1 >= depth else error

:-)
aber das sind feinheiten

Yzerman
03.02.2004, 14:53:05
Klar schneide ich den zu durchsuchenden String hinten ab, und zwar um genau die Stellen, wie die Suchstrings lang sind.

Wenn ich 'testhalber' bspw. 3er Buchstaben-weise in einem anderen String suchen will, kann ich nach 'ber', also 3 Buchstaben vor Wortende, aufhören. Danach bekomme ich keine Dreiergruppe mehr zusammen.

Also ziehe ich in der Schlussbedingung für die Schleife die Länge des Suchstrings ab.

flobee
04.02.2004, 05:40:43
ganau, wenn 'ber' nun das suchwort ist wirds doch nicht gefunden!
ich hab dies zur sicherheit gebaut:
function chk_strstr($long, $short, $depth=1) {
$depth = intval($depth) == 0 ? 1 : intval($depth);
$res = FALSE;
for($i=0; $i < (strlen($long)); $i++) {
$part = substr($short, $i, $depth);
// test
//echo $part .',';
if(strlen($part)==$depth && stristr($long, $part) ) {
$res = TRUE;
break;
}
}
return $res;
}

Yzerman
04.02.2004, 07:26:25
stimmt, hatte einen kleinen Fehler drin:


function checkstr ($string1,$string2,$depth) {
$res=FALSE;
for ($i=0; $i<(strlen ($string1)-$depth+1); $i++) {
if (strstr ($string2,substr ($string1,$i,$depth))) {
$res=TRUE;
break;
}
}
return $res;
}


Die Abbruchbedingung der FOR-Schleife muss um eins erhöht werden, dann funktioniert's.
Getestet und für gut befunden.

flobee
04.02.2004, 08:02:17
:-)
aber if (strstr ($string2,substr ($string1,$i,$depth))) {
string 1 und 2 umdrehen, oder sehe ich das falschfunction chk_strstr( $str, $key, $depth) {
$res=FALSE;
for ($i=0; $i < ( strlen($str) - $depth+1 ); $i++) {
if ( strstr($str, substr($key, $i, $depth)) ) {
$res=TRUE;
break;
}
}
return $res;
}

Yzerman
04.02.2004, 10:29:56
Die String-Häppchen sollen aus String1 herausgelesen und geprüft werden, ob sie in String2 vorkommen, also muss das denke ich so aussehen.

Wie gesagt - an dem Script ist nicht zu rütteln, ich hab's bei mir lokal getestet.

Aber nun soll's auch gut sein damit, zumal ich darin kaum einen praktischen Nutzen sehe... :-)