Ich habe ein Problem, ich habe ein String-Array und ich möchte in einem anderen Trennzeichen explodieren. Beispielsweise
$example = 'Appel @ Ratte';
$example2 = 'apple vs ratte'
und ich brauche ein Array, das in @ oder vs.
Ich habe bereits eine Lösung geschrieben, aber wenn jeder eine bessere Lösung hat, posten Sie bitte hier.
private function multiExplode($delimiters,$string) {
$ary = explode($delimiters[0],$string);
array_shift($delimiters);
if($delimiters != NULL) {
if(count($ary) <2)
$ary = $this->multiExplode($delimiters, $string);
}
return $ary;
}
Antworten:
was ist mit
quelle
explode()
auf einzelne Argumente/
,?
). Zum Beispiel :preg_split("/(\/|\?|=)/", $foo);
.$str='/x/1/2/3/4/5/y/100/200/z/777'; preg_split("/(x|y|z|)/", $str);
und zu sehenarray('x'=>'1/2/3/4/5', 'y'=>'100/200', 'z'=>'777')
/ (
und) /
preg_split nicht mehr funktionieren. Ich musste die Leerzeichen entfernen und dann funktionierte es wie erwartet (mit PHP 7)Sie können die erste Zeichenfolge nehmen, alle
@
durchvs
using ersetzenstr_replace
und dann explodierenvs
oder umgekehrt.quelle
(@|@!)
Fall)Quelle: php @ metehanarslan bei php.net
quelle
Wie wäre es
strtr()
, wenn Sie alle anderen Begrenzer durch die ersten ersetzen würden?Es ist irgendwie unlesbar, denke ich, aber ich habe es als Arbeit hier getestet.
Einzeiler ftw!
quelle
Würde nicht
strtok()
für dich arbeiten?quelle
Sie können einfach den folgenden Code verwenden:
quelle
Sie können diese Lösung ausprobieren ... Sie funktioniert hervorragend
Quelle: http://www.phpdevtips.com/2011/07/exploding-a-string-using-multiple-delimiters-using-php/
quelle
Ich mache es so ...
quelle
Wie wäre es damit?
In Ihrem Fall sollten Sie ein Array für den Parameter $ delimiters verwenden. Dann ist es möglich, mehrere Zeichen als ein Trennzeichen zu verwenden.
Wenn Sie sich nicht für nachgestellte Leerzeichen in Ihren Ergebnissen interessieren, können Sie das
array_map('trim', [...] )
Teil in der Rückgabezeile entfernen . (Aber sei in diesem Fall kein Quibbler. Behalte daspreg_split
drin.)Erforderliche PHP-Version: 5.3.0 oder höher.
Sie können es hier testen
quelle
Sie werden einige Probleme haben (was ist, wenn Sie diese Zeichenfolge haben: "vs @ apples" zum Beispiel), wenn Sie diese Methode der Trennung verwenden. Wenn wir jedoch zunächst feststellen, dass Sie darüber nachgedacht und alle möglichen Kollisionen behoben haben, Sie könnten einfach alle Vorkommen von
$delimiter[1]
bis$delimiter[n]
durch ersetzen$delimiter[0]
und dann das erste aufteilen?quelle
Wenn Ihr Trennzeichen nur aus Zeichen besteht, können Sie verwenden
strtok
, was hier besser zu passen scheint. Beachten Sie, dass Sie es mit einerwhile
Schleife verwenden müssen, um die Effekte zu erzielen.quelle
Das wird funktionieren:
Wie Sie sehen können, klebt es zuerst die durch \ n \ r explodierten Teile zusammen mit einem Leerzeichen, um es dann wieder auseinander zu schneiden, wobei es diesmal die Leerzeichen mitnimmt.
quelle