Veröffentlicht 26. Januar 200421 j Hallo, hab einen csv String... bla,bla,"bla,bla,bla",bla,bla,"bla,bla",bla ..jetzt möchte ich mit explode($meinString,",") den String nach Kommas trennen, aber nur nach Kommas die nicht zwischen " " stehen. Wie mach ich das am elegantesten? Vielen Dank Jens
26. Januar 200421 j Well, mir fällt grad nix blöderes ein, als den String mal nach \" zu exploden und dann, jenachdem, ob am anfang des strings ein " vorkam alle ungeraden, andernfalls alle geraden Arrayelemente nochmal nach Komma zu trennen und das ganze zum Ergebnis-Array hinzufügen: //$meinString enthält das zu splittende Array //nach " trennen $tmp_1 = explode($meinString , "\""); //wenn der erste Teil kein "bla,bla" war, dann nimm alle geraden Elemente //ansonsten fange erst beim nächsten an und kopiere das erste "bla,bla" samt //Anführungszeichen ins Ergebnis-Array if (strpos($meinString,"\"") > strpos($meinString,",") ) $i = 0; else { array_push($erg, "\"".$tmp_1[0]."\""); $i = 1; } if (; $i < count($tmp_1); $i+=2) { //"Normale" Teile ohne " nach Komma trennen und ins Ergebnis pushen $tmp_2 = explode($tmp_1[$i] , ","); foreach ($tmp_2 as $tmp_3) array_push($erg,$tmp_3); //Wenn danach noch ein "-Teil kommen könnte, diesen mit " ins Ergebnis if ($i+1 < count($tmp_1) array_push($erg, "\"".$tmp[$i+1]."\""); } [/PHP] Sorry, Code ist unübersichtlich, aber ich hab net soviel Zeit gehabt HTH mfg kLeiner_HobBes
27. Januar 200421 j Noch eleganter geht's so: <?php $text='bla,bla,"bla,bla,bla",bla,bla,"bla,bla",bla'; $pattern="/\"([^\"]*)\"|([^,]*)/"; preg_match_all( $pattern, $text, $array ); $array = array_filter( array_merge( $array[1], $array[2] ) ); print_r($array); ?> [/PHP]
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.