Sebagai contoh, saya ingin membuat array dari elemen-elemen dalam string ini:
$str = 'red, green, blue ,orange';
Saya tahu Anda bisa meledak dan memutarnya:
$arr = explode(',', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
Tapi saya merasa ada pendekatan satu garis yang bisa menangani ini. Ada ide?
php
explode
trim
higher-order-functions
SeanWM
sumber
sumber
Jawaban yang ditingkatkan
Hasil:
Ini
sumber
red
dengan*red*
. Yang lebih baik mungkin / (\ s *, \ s *) + /Berikut ini juga menangani spasi putih di awal / akhir string input:
dan ini adalah tes minimal dengan spasi putih di setiap posisi yang masuk akal:
sumber
array_map
dan solusi regexp menghasilkan hasil yang identik, dapatkah orang membandingkan kinerja mereka?ini cara Anda mengganti dan meledak dalam satu baris kode
akan menampilkan hasilnya sebagai
sumber
Dengan menggabungkan beberapa kepala sekolah dalam jawaban yang ada saya datang dengan
Alasan di baliknya adalah bahwa saya menemukan bug dalam jawaban ini , di mana jika ada koma di akhir string itu akan mengembalikan elemen kosong dalam array. yaitu
Hasil dalam
Anda dapat memperbaikinya dengan menggunakan PREG_SPLIT_NO_EMPTY sebagaimana disebutkan dalam jawaban ini untuk menghapusnya, tetapi begitu Anda melakukannya, secara teknis tidak perlu menghapus koma berturut-turut melalui regex, sehingga ekspresi yang dipersingkat
sumber
Anda juga dapat melakukan ini dengan regex satu baris
sumber
coba ini:
sumber
preg_replace()
tidak menghasilkan array dari string. Ini adalah jawaban yang benar untuk pertanyaan yang salah. Diturunkan.$list = preg_split("/\s*,\s*/", 'red, green, blue ,orange');
modifikasi kecil merehabilitasi jawabannyaKHUSUS untuk string sampel OP, karena setiap substring yang akan dicocokkan adalah satu kata, Anda dapat menggunakan str_word_count () .
Kode: ( Demo )
Keluaran:
Ini juga dapat disesuaikan untuk substring di luar huruf (dan beberapa tanda hubung dan apostrof - jika Anda membaca cetakan halus) dengan menambahkan karakter yang diperlukan ke karakter topeng / parameter ke-3.
Kode: ( Demo )
Keluaran:
Sekali lagi, saya memperlakukan pertanyaan ini dengan sangat sempit karena string sampel, tetapi ini akan memberikan hasil yang diinginkan sama:
Kode: ( Demo )
sumber
Anda dapat menggunakan preg_split () untuk itu.
sumber
sumber
\t\n\r\0\x0B
juga$ str = 'merah, hijau, biru, oranye';
$ str = trim ($ str);
$ strArray = meledak (',', $ str);
print_r ($ strArray);
sumber