Mam problem, mam tablicę ciągów i chcę eksplodować w innym ograniczniku. Na przykład
$example = 'Appel @ Ratte';
$example2 = 'apple vs ratte'
i potrzebuję tablicy, która eksploduje w @ lub vs.
Napisałem już rozwiązanie, ale jeśli każdy ma lepsze rozwiązanie, napisz tutaj.
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;
}
Odpowiedzi:
co z używaniem
źródło
explode()
/
,?
). Na przykład:preg_split("/(\/|\?|=)/", $foo);
.$str='/x/1/2/3/4/5/y/100/200/z/777'; preg_split("/(x|y|z|)/", $str);
i do zobaczeniaarray('x'=>'1/2/3/4/5', 'y'=>'100/200', 'z'=>'777')
/ (
i) /
zatrzymałem działanie preg_split. Musiałem usunąć spacje, a potem działało zgodnie z oczekiwaniami (używając PHP 7)Można wziąć pierwszy ciąg, należy wymienić wszystkie
@
zvs
użyciemstr_replace
, a następnie eksplodować navs
odwrót.źródło
(@|@!)
przypadek)Źródło: php @ metehanarslan na php.net
źródło
A co powiesz
strtr()
na zastąpienie wszystkich pozostałych separatorów pierwszym?Wydaje mi się, że to trochę nieczytelne, ale przetestowałem to jako pracujące tutaj.
One-liners ftw!
źródło
Nie
strtok()
zadziała dla Ciebie?źródło
Po prostu możesz użyć następującego kodu:
źródło
Możesz wypróbować to rozwiązanie ... Działa świetnie
Źródło: http://www.phpdevtips.com/2011/07/exploding-a-string-using-multiple-delimiters-using-php/
źródło
Robię to w ten sposób ...
źródło
Co powiesz na to?
W twoim przypadku powinieneś użyć Array dla parametru $ delimiters. Wtedy można użyć wielu znaków jako jednego separatora.
Jeśli nie interesują Cię końcowe spacje w wynikach, możesz usunąć
array_map('trim', [...] )
część w wierszu zwracania. (Ale nie wygłupiaj się w tym przypadku. Zachowajpreg_split
w nim).Wymagana wersja PHP: 5.3.0 lub nowsza.
Możesz to przetestować tutaj
źródło
Będziesz miał pewne problemy (co, jeśli masz na przykład ten ciąg: "vs @ jabłka") używając tej metody rozdzielania, ale jeśli zaczniemy od stwierdzenia, że przemyślałeś to i naprawiłeś wszystkie możliwe kolizje, można po prostu zastąpić wszystkich wystąpień
$delimiter[1]
do$delimiter[n]
z$delimiter[0]
, a następnie podzielone na tej pierwszej?źródło
Jeśli twoim separatorem są tylko znaki, możesz użyć
strtok
, który wydaje się bardziej pasować tutaj. Zauważ, że musisz użyć go zwhile
pętlą, aby osiągnąć efekty.źródło
To zadziała:
Jak widać, najpierw skleja eksplodowane części \ n \ r ze spacją, a następnie ponownie je rozdziela, tym razem zabierając ze sobą spacje.
źródło