Na przykład chciałbym utworzyć tablicę z elementów w tym ciągu:
$str = 'red, green, blue ,orange';
Wiem, że możesz eksplodować, przechodzić przez nie w pętlę i przycinać:
$arr = explode(',', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
Ale czuję, że istnieje podejście jednokierunkowe, które może sobie z tym poradzić. Jakieś pomysły?
php
explode
trim
higher-order-functions
SeanWM
źródło
źródło
Ulepszona odpowiedź
Wynik:
To
źródło
red
z*red*
. Lepszym może być / (\ s *, \ s *) + /Poniższy przykład zajmuje się również spacjami na początku / końcu ciągu wejściowego:
a to jest minimalny test ze spacjami w każdej rozsądnej pozycji:
źródło
array_map
rozwiązania regexp dają identyczne wyniki, czy ktoś mógłby porównać ich wydajność?w ten sposób zastępujesz i eksplodujesz w pojedynczym wierszu kodu
wyświetli wyniki jako
źródło
Łącząc niektóre z głównych zasad w istniejących odpowiedziach, które wymyśliłem
Powodem tego jest to, że znalazłem błąd w tej odpowiedzi , gdzie jeśli na końcu ciągu znajduje się przecinek, zwróci on pusty element w tablicy. to znaczy
Prowadzi do
Możesz to naprawić, używając PREG_SPLIT_NO_EMPTY, jak wspomniano w tej odpowiedzi, aby go usunąć, ale gdy to zrobisz, technicznie nie ma potrzeby usuwania kolejnych przecinków za pośrednictwem wyrażenia regularnego, stąd skrócone wyrażenie
źródło
Możesz to również zrobić za pomocą wyrażenia regularnego z jedną linią
źródło
Spróbuj tego:
źródło
preg_replace()
nie generuje tablicy z łańcucha. To jest właściwa odpowiedź na złe pytanie. Głosowano w dół.$list = preg_split("/\s*,\s*/", 'red, green, blue ,orange');
drobna modyfikacja rehabilituje odpowiedźSZCZEGÓLNIE dla przykładowego ciągu OP, ponieważ każdy dopasowywany podciąg to pojedyncze słowo, możesz użyć str_word_count () .
Kod: ( Demo )
Wynik:
Można to również dostosować do podciągów poza literami (i niektórych myślników i apostrofów - jeśli czytasz drobny druk), dodając niezbędne znaki do maski znaku / trzeciego parametru.
Kod: ( Demo )
Wynik:
Ponownie traktuję to pytanie bardzo wąsko ze względu na przykładowy ciąg, ale zapewni to ten sam pożądany wynik:
Kod: ( Demo )
źródło
Możesz do tego użyć preg_split () .
źródło
źródło
\t\n\r\0\x0B
również$ str = 'czerwony, zielony, niebieski, pomarańczowy';
$ str = przycinanie ($ str);
$ strArray = eksplodować (',', $ str);
print_r ($ strArray);
źródło