String mit Trennzeichen teilen - auch leere Felder!

Hallo,

ich bastel ja gerade für eine Feuerwehr ein Alarm-Anzeigetableau. Unsere Leitstelle schickt die Alarmierung in folgendem Format:

Nummer/Alarmstichwort/Name/Objekt/Strasse/Ort/Infos

also z.B.

1234/Gebaeudebrand/Maier/Hochhaus/Hauptstr. 123/Musterhausen/Personen im Gebaeude vermisst

soweit funktioniert das super, da ich die Daten mit der explode-Funktion schön in ein Array zur Anzeige zerlegen kann.

Wenn nun aber (ein oder mehrere) Felder leer sind, spinnt alles rum, da leere Felder im Array einfach übersprungen werden. Ich habe z.B. bei unbekanntem Namen und Objekt die Strasse im Name-Feld, den Ort im Objekt-Feld und die Infos im Strasse-Feld. Also rückt einfach alles vor.

Wie kann ich das verhindern? Habe vorher eine Ersetzung von „//“ durch „/ /“ versucht um ein Leerzeichen einzufügen, aber auch das klappt nicht…

Wir kann ich das nun machen?

Wäre über Tipps und Hinweise sehr dankbar! Ist nämlich doof, wenn die Daten bei einem Einsatz auf dem Monitor in der Umkleide falsch dargestellt werden…

Gruss Daniel

Kann ich nicht bestätigen:


<?php
$str = '1234/Gebaeudebrand///Hauptstr. 123/Musterhausen/Personen im Gebaeude vermisst';
print_r(explode('/', $str));
?>

Benimmt sich exakt so wie du es beschreibst wie es sein soll. Das PHP Manual sagt das gleiche. Dein Script muss einen Fehler enthalten.

Oder ich hab dein Problem nicht verstanden… :confused:

Toni

komisch… Im Webfront-Ordner von IPS befindet sich folgendes Script, welches ich als fehlerfrei einstufen würde… Aber immer dieses Problem… Wenn ich Deinen „Test-Snippet“ nehme, stimmt es…???


<?
 //Fgen Sie hier ihren Skriptquellcode ein

if (GetValue(15023 /*[einsatzmodus]*/) == False)
{

$zerlegt = explode('/', $meldung);
SetValueString(39186, $zerlegt[1]);
SetValueString(56964, $zerlegt[2]);
SetValueString(21331, $zerlegt[3]);
SetValueString(43319, $zerlegt[4]);
SetValueString(50232, $zerlegt[5]);

$infos = $zerlegt[6] . $zerlegt[7] . $zerlegt[8] . $zerlegt[9] . $zerlegt[10] ;
SetValue(33374, $infos);

IPS_RunScriptEx(57586, Array());
}

?>

Wo ist mein Bug…? Auch die IPS-Variable mit den Zusatzinfos ($infos) wird nicht gefüllt…?

Gruss Daniel

Okay. Den Syntax-Error habe ich gefunden. Einen „.“ statt eines „;“ am Zeilenende… Was aber mit dem Rest nix zu tun hatte…

Wo hast Du denn $meldung definiert ?

Die wird vom Alarmierungs-Programm übergeben. Das Programm auf dem IPS-Webfront wird per wget aufgerufen in der Art von

http://ipsserver/alarm.php?meldung=%1

Das Programm übergibt dann als %1 die Meldung. Das stimmt also, sonst würden ja garkeine Daten ankommen… Hier kann der Bug nicht sein… :frowning:

Ein Array fängt bei 0 an.
das ; gehört nicht hinter deine letzte }

Okay… Ist im Beispiel bissel doof. Klar, dass es bei 0 anfängt. Nur den ersten Wert (Einsatznummer) brauche ich nicht…

Wobei es ja klappt, wenn sämtliche Werte belegt sind. Nur wenn was unbelegt ist, verschiebt sich alles!

Gruss Daniel

Was ist das Resultat folgenden Scripts bei Dir?


echo $meldung."
";
$zerlegt = explode('/', $meldung);
echo $zerlegt[1]."
";
echo $zerlegt[2]."
";
echo $zerlegt[3]."
";
echo $zerlegt[4]."
";
echo $zerlegt[5]."
";
echo $zerlegt[6]."
";
echo $zerlegt[7]."
";
echo $zerlegt[8]."
";
echo $zerlegt[9]."
";
echo $zerlegt[10]."
";

Ein Array fängt bei 0 an.

Rainer, das stimmt so nicht.


$arr = array(1 => "a", 2 => "b");
echo $arr[1]; //a

Ein Array kann bei einem beliebigen Index anfangen.