1. explode()
Die Standardfunktion, um kommagetrennte Strings in Arrays umzuwandeln, ist explode($delimiter, $string). Sie zerteilt den String $string überall da, wo sie das Trennzeichen $delimiter (ebenfalls ein String) findet ($delimiter darf auch aus mehreren Zeichen bestehen). Das nächste Beispiel demonstriert die Anwendung:
<?php $str = 'Tag1, Tag2, Tag3'; $arr = explode(',', $str); // String $str an jedem Komma (",") trennen var_dump($arr); ?>
array(3) { [0]=> string(4) "Tag1" [1]=> string(5) " Tag2" [2]=> string(5) " Tag3" }
2. explode() und trim() verknüpfen
Wie im vorherigen Beispiel zu sehen ist, werden auch Leerzeichen rund um das Trennzeichen übernommen. In manchen Fällen kann man $delimiter entsprechend abändern und zum Beispiel auf ", " setzen. Macht man das, wird von explode() aber auch erwartet, dass auf das Komma immer ein Leerzeichen folgt. Dort, wo die Funktion nur ein Komma (ohne Leerzeichen) findet wird sie nicht teilen, was wohl in der Regel nicht erwünscht ist.
Es empfiehlt sich daher, explode() und trim($str) in solchen Fällen zu verknüpfen. Die Funktion trim($str) entfernt alle Whitespace-Zeichen (zu denen das Leerzeichen gehört) vom Anfang und Ende des Strings $str. Es kann leicht auf das Ergebnis von explode() durch Verwendung von array_map($callback, $arr) angewendet werden. array_map($callback, $arr) wendet die Callback-Funktion $callback auf alle Werte in $arr an und gibt das abgeänderte Array zurück. Um trim() als Callback zu benutzen, muss nur der String "trim" übergeben werden, PHP erledigt dann den Rest.
Im nachfolgenden Beispiel ist dieses Vorgehen dargestellt. Der String mit Tags ist der selbe, genauso wie die explode-Funktion. Durch Anwendung von trim() und array_map() werden allerdings die unerwünschten Leerzeichen diesmal entfernt.
<?php $str = 'Tag1, Tag2, Tag3'; $arr = explode(',', $str); $arr = array_map('trim', $arr); var_dump($arr); ?>
array(3) { [0]=> string(4) "Tag1" [1]=> string(4) "Tag2" [2]=> string(4) "Tag3" }
Die Kombination von explode(), array_map() und trim() lässt sich leicht in einer Funktion unterbringen, um so ein explode() zu erhalten, welches zusätzlich noch trim() auf allen Werten ausführt:
<?php function explodeTrimmed($delimiter, $str) { $arr = explode($delimiter, $str); return array_map('trim', $arr); } $str = 'Tag1, Tag2, Tag3'; var_dump(explodeTrimmed(',', $str)); ?>
array(3) { [0]=> string(4) "Tag1" [1]=> string(4) "Tag2" [2]=> string(4) "Tag3" }
3. preg_split()
Statt explode() und trim() lässt sich ein String auch anhand eines regulären Ausdrucks trennen. Dies ermöglicht es zu definieren, dass vor und nach dem Trennzeichen (hier das Komma) Leerzeichen auftreten können, aber nicht müssen. Die Funktion, um dies durchzuführen, ist preg_split($regex, $string). Diese trennt den String $string überall dort, wo sie den regulären Ausdruck $regex findet.
<?php $str = 'Tag1, Tag2, Tag3'; // Bedeutung des regulaeren Ausdrucks: // beliebig viele Leerzeichen (koennen auch 0 sein), dann ein Komma, // dann wieder beliebig viele Leerzeichen (wieder optional 0) $arr = preg_split('/\s*\,\s*/', $str); var_dump($arr); ?>
array(3) { [0]=> string(4) "Tag1" [1]=> string(4) "Tag2" [2]=> string(4) "Tag3" }