Wert aus String auslesen
Xava
- php
Hallo!
Ich habe folgendes Problem: Ich habe einen String $str in dem mehrere Zeilen vorhanden sind. In einer Zeile steht Folgendes:
id: 0123456789
Der linke Teil "id:" ist immer konstant in seinem Wert. Die Zahl ist von variabler Länge.
Ich benötige nun diese Zahl. Wie kann ich das am geschicktesten anstellen?
hi!
das machst du glaube ich am besten mit substr!
hier der link:
http://www.selfphp.de/funktionsreferenz/string_funktionen/substr.php
greetz
MakkuZ
Hallo MakkuZ!
das machst du glaube ich am besten mit substr!
Prinziepell ja. Aber in diesem Fall muss man erst die Zeile finden.
D.h. den String zeilenweise auslesen. Dann mit einer RegEx auf das Format prüfen (Schlüsselwort: Zahlenwert) und dann den Zahlenwert auslesen. Schön wäre, wenn (zuviele) Leerzeichen am Zeilen Anfang und zwischen dem Schlüsselwort und dem Zahlenwert abgefangen werden könnten bzw. nicht zu Problem führen.
Hallo Xava,
Prinziepell ja. Aber in diesem Fall muss man erst die Zeile finden.
dann hast du auch schon ereg() und preg_match() probiert?
Gruß
Karin
Habe mir jetzt mal folgendes ausgedacht:
$str = "Hallo Welt\n"
."\r\n"
." id: 08154711";
// Wagenrücklauf entfernen
$str = preg_replace('/\r\n|\r|\n/', '\n', $str);
// Zeilenweise auslesen und in ein Array legen
$zeilen = preg_split("/\n/", $str);
for ($i=0; $i<count($zeilen); $i++) {
if (preg_match("/\s*id:\s[0-9]+/"i), $zeilen[$i]) {
// Ersetze Leerzeichen am Anfang und Ende durch NULL
$str_neu = $zeilen = preg_split("/(^\s)|(\s$)/", '', $zeilen[$i]);
/* Ersetze alle Leerzeichen mit mehr als eins durch nur ein Leerzeichen */
$str_neu = $zeilen = preg_split("/\s{2,}/", ' ', $str_neu);
$str_neu = substr($str_neu, 4, strlen($str_neu)-4);
break;
}
}
echo $str_neu;
Würde dass funktionieren? Oder ist es zu Umständlich bzw. geht es einfacher?
Nach einigen Test und Fehlerkorrekturen nun folgende funktionierende Lösung:
$key = "id";
$str = "Hallo Welt\n"
."\r\n"
." id: 08154711 ";
// Wagenrücklauf entfernen
$replace_str = "\n";
$str = preg_replace('/\r\n|\r/', $replace_str, $str);
// Zeilenweise auslesen und in ein Array legen
$zeilen = preg_split("/\n/", $str);
for ($i=0; $i<count($zeilen); $i++) {
if (preg_match("/\s*id:\s+[0-9]+/i", $zeilen[$i])) {
// Ersetze Leerzeichen am Anfang und Ende durch NULL
$replace_str = "";
$str_neu = preg_replace("/(^\s)|(\s$)/", $replace_str, $zeilen[$i]);
// Ersetze alle Leerzeichen mit mehr als eins durch nur ein Leerzeichen
$str_neu = preg_replace("/\s{2,}/", ' ', $str_neu);
$str_neu = substr($str_neu, (strlen($key)+2), strlen($str_neu)-4);
break;
}
}
echo $str_neu;
Bleibt die Frage offen, ob es zu umständlich ist bzw. ob es eine einfachere Lösung gibt.
Hallo Xava,
Ich habe einen String $str in dem mehrere Zeilen vorhanden sind.
Der linke Teil "id:" ist immer konstant in seinem Wert. Die Zahl ist von variabler Länge.
Ich benötige nun diese Zahl. Wie kann ich das am geschicktesten anstellen?
ob das am geschicktesten ist, weiß ich nicht, aber ich würde per
substr
http://de3.php.net/manual/de/function.substr.php
den String nach "id:" durchsuchen und den Rest ausgeben.
hoffe, das hilft ein wenig
Grüße
Karin