strpos - help
Bruzz
- php
Hallo zusammen,
ich habe eine Excel die ich mit PHP auslesen möchte.
Darin ist z.b. eine Zelle in Spalte 3:
Blabla Diesdas black/black/white
Gibt es eine Möglichkeit, so dass ich mit strpos nur den ersten Wert vor dem Slash auslese? Also quasi vom ersten Slash soviele Buchstaben rückwärts bis ein Leerzeichen kommt?
Danke für Hilfe und Grüße
Hallo zusammen,
ich habe eine Excel die ich mit PHP auslesen möchte.
Darin ist z.b. eine Zelle in Spalte 3:
Blabla Diesdas black/black/whiteGibt es eine Möglichkeit, so dass ich mit strpos nur den ersten Wert vor dem Slash auslese? Also quasi vom ersten Slash soviele Buchstaben rückwärts bis ein Leerzeichen kommt?
Danke für Hilfe und Grüße
Wie wäre es hiermit:
$string = "Blabla Diesdas black/black/white"
$string = explode(" ", $string);
$slashwerte = split("/", $string[2]); // wohl wissend, dass ich jetzt von den Hütern der Orthodoxie wieder einen auf die Mütze bekomme, von wegen "Regular Expression-Funktionen nach POSIX-Standard sind seit PHP 5.3 veraltet"...
$ersterWert = $slashwerte[0];
Bis bald im Khyberspace!
Yadgar
Now playing: The Calling (Yes)
Wie wäre es hiermit:
$string = "Blabla Diesdas black/black/white"
$string = explode(" ", $string);
$slashwerte = split("/", $string[2]); // wohl wissend, dass ich jetzt von den Hütern der Orthodoxie wieder einen auf die Mütze bekomme, von wegen "Regular Expression-Funktionen nach POSIX-Standard sind seit PHP 5.3 veraltet"...
$ersterWert = $slashwerte[0];
Hallo,
erstmal danke für deine Hilfe, das hat mich schon näher gebracht, alledings hätte ich noch genauer werden müssen. Bspw. sind nicht immer 3 Farben angegeben. es kann auch so heissen
Blabla Dingdong black/blue
Blabla Dingdong blue
Blabla DIngdong blue/white/black
diese 3 Kombis sind möglich.
Mit deiner Lösung klappt es nur teilweise leider :(
VG
High!
erstmal danke für deine Hilfe, das hat mich schon näher gebracht, alledings hätte ich noch genauer werden müssen. Bspw. sind nicht immer 3 Farben angegeben. es kann auch so heissen
Blabla Dingdong black/blue
Blabla Dingdong blue
Blabla DIngdong blue/white/blackdiese 3 Kombis sind möglich.
Mit deiner Lösung klappt es nur teilweise leider :(VG
Dann halt so:
$string = explode(" ", $string);
if (strchr("/", $string[2]))
{
$slashwerte = split("/", $string[2]);
$ersterWert = $slashwerte[0];
}
else $ersterWert = $string[2];
Bis bald im Khyberspace!
Yadgar
Hi!
alledings hätte ich noch genauer werden müssen. Bspw. sind nicht immer 3 Farben angegeben. es kann auch so heissen
Blabla Dingdong black/blue
Blabla Dingdong blue
Blabla DIngdong blue/white/black
Wie heißt also die eigentliche Regel? Vom letzten Leerzeichen alles bis Stringende oder bis zum ersten /? Unter der Voraussetzung, dass nicht auch noch Leerzeichen in den Farbnamen auftauchen, kannst du erstmal die Position des letzten Leerzeichens ermitteln und den Teilstring danach extrahieren. Wenn dann noch ein / enthalten ist, den Teilstring bis dorthin nehmen.
Oder weiterhin mit einem regulären Ausdruck, allerdings ein wenig erweitert: ein Leerzeichen, gefolgt von Nicht-Leerzeichen und Nicht-/ gefolgt von / oder String-Ende suchen und davon den Mittelteil verwenden.
Lo!
Wie heißt also die eigentliche Regel? Vom letzten Leerzeichen alles bis Stringende oder bis zum ersten /?
Genau, das ist die regel. Nach dem letzten Leerzeichen soll das nachfolgende Wort entweder ganz genommen werden oder bis zum ersten Slash/
Unter der Voraussetzung, dass nicht auch noch Leerzeichen in den Farbnamen auftauchen, kannst du erstmal die Position des letzten Leerzeichens ermitteln und den Teilstring danach extrahieren. Wenn dann noch ein / enthalten ist, den Teilstring bis dorthin nehmen.
Na gut dann kämpf ich mich da mla durch :)
Danke
Denken vor dem Schreiben :)
So gehts richtig:
$farbe_neu = strrchr ($data->val($i,'C'), ' ');
echo $farbe_neu.'<br />';
$slashposition= strpos ($farbe_neu, '/');
if(strpos($farbe_neu, '/')){
$farbe = ucfirst(strtolower(substr($farbe_neu, 0, $slashposition))); }
else{
$farbe = ucfirst(strtolower($farbe_neu));
}
Wie heißt also die eigentliche Regel? Vom letzten Leerzeichen alles bis Stringende oder bis zum ersten /? Unter der Voraussetzung, dass nicht auch noch Leerzeichen in den Farbnamen auftauchen, kannst du erstmal die Position des letzten Leerzeichens ermitteln und den Teilstring danach extrahieren. Wenn dann noch ein / enthalten ist, den Teilstring bis dorthin nehmen.
Hm ich habs jetzt mal probiert, aber mir werden nur Zahlen ausgegeben?
Jemand ne Idee?
// Farbe
$leerzeichen = strrchr ($data->val($i,'C'), ' ');
$farbe_neu = strpos ($data->val($i,'C'), $leerzeichen);
echo $farbe_neu.'<br />';
$slashposition= strpos ($farbe_neu, '/');
if(strpos($farbe_neu, '/')){
$farbe = ucfirst(strtolower(substr($farbe_neu, 0, $slashposition))); }
else{
$farbe = ucfirst(strtolower($farbe_neu));
}
Moin!
diese 3 Kombis sind möglich.
Mit deiner Lösung klappt es nur teilweise leider :(
Du splittest zu erst am Slash, nimm das erste Element.
Du splittest jetzt am Leerzeichen und nimmst den letzten Teil.
$ar=explode('/', $str, 2);
$ar=array_reverse(explode(' ', $ar[0]));
return $ar[0];
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi!
Blabla Diesdas black/black/white
Gibt es eine Möglichkeit, so dass ich mit strpos nur den ersten Wert vor dem Slash auslese? Also quasi vom ersten Slash soviele Buchstaben rückwärts bis ein Leerzeichen kommt?
strpos() kann aus einem String nichts auslesen, nur die Position von Zeichen ermitteln. Damit kannst du das erste Vorkommen des / ermitteln. Um von da rückwärts die Position des Leerzeichens zu ermitteln, kann dir strrpos() helfen, dem du als Offset den Abstand zwischen / und Stringende mitteilst, mit negativem Vorzeichen.
Alternativ kannst du auch mit einem regulären Ausdruck ein Leerzeichen, gefolgt von Nicht-Leerzeichen und Nicht-/ gefolgt von / suchen und davon den Mittelteil verwenden.
Lo!