[PHP]String nach Koordinaten filtern



  • Hi!

    Ich komme gerade mit PHP und preg_match_all nicht so recht weiter:
    Über ein Textfeld will ich eine Menge von Koordinaten in dieser Form eingeben:

    (1,1);(2,2);(3,3)
    

    . Die Koordinaten sind dann alle schön sauber mit Semikolon getrennt, daher dachte ich das es da einen einfachen Weg in PHP gibt den String zu filtern. Aber dummerweise bekomme ich das nicht so recht hin!

    Also Ziel ist es am besten die Koordinaten in ein 2 dimensionales Array zu bekommen, damit ich hinter damit weiterarbeiten kann. Eindimensional wäre auch noch machbar. Natürlich könnte ich den String mit substr/strpos einfach durchgehen und die Werte kopieren, aber irgendwie dachte ich mir, dass es bei PHP mit preg_match etc. etwas elegantere Methoden gibt.

    Jemand ne Idee wie ich das sinnvoll hinbekomme?

    Gruß Pille

    P.S: Die einzelnen Werte der Koordinaten werden maximal 5 Stellen haben, also sollte sowas wie preg_match_all("/(\d{1,5})/",$List, $array); mehr oder weniger funktionieren.



  • Klar, geht alles. Aber hier würde ich wirklich vorschlagen:
    str_explode, dann die Klammern am Rand rausschmeißen (oder erst gar nicht einführen ...) und einfach beim Komma teilen. Voilà, fertig. Simpel und schnell.



  • so aehnlich haette ich es auch gemacht:

    $coordsOrig = "(1,1);(2,2);(3,3)";
    
    $coordsParsed = explode(';', $coordsOrig);
    
    $i = 0;
    while($coordsParsed[$i++])
    {
        $coordsSepareted[$i][0] = $coordsParsed[$i][1];
        $coordsSepareted[$i][1] = $coordsParsed[$i][3];
    }
    

    code ist ungetested, aber sollte klar sein...



  • Hio!

    @Moh: Ich glaube deine Variante funktioniert nicht ganz, weil die Koordinaten ja auch mehrere Ziffern haben können. Als z.B. (100,2300) oder so.

    Ich habe jetzt eine Variante mit explode und substr genommen, sieht nicht sher elegant aus, aber funktioniert:

    function listToArray($List) {
    		$array = array(array());
    		$array = explode(";",$List); // 
    
    		for ($i = 0; $i < count($array); ++$i) {
    			$array[$i] = substr($array[$i],1,strlen($array[$i])-2); //Klammern abschneiden
    			$array[$i] = explode(",",$array[$i]); // Zahlen filtern
    		}
    		return $array;
    	}
    


  • Das $array = array(array()); kannst du dir schenken. Ansonsten finde ich die Lösung durchaus elegant. Man muss nicht immer mit Kanonen auf Spatzen schießen 🤡


Anmelden zum Antworten