Saya punya masalah, saya punya array string, dan saya ingin meledak di pembatas yang berbeda. Sebagai contoh
$example = 'Appel @ Ratte';
$example2 = 'apple vs ratte'
dan saya membutuhkan array yang meledak di @ atau vs.
Saya sudah menulis solusi, tetapi Jika semua orang memiliki solusi yang lebih baik silakan posting di sini.
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;
}
Jawaban:
bagaimana dengan menggunakan
sumber
explode()
dengan satu argumen/
,?
). Sebagai contoh:preg_split("/(\/|\?|=)/", $foo);
.$str='/x/1/2/3/4/5/y/100/200/z/777'; preg_split("/(x|y|z|)/", $str);
dan untuk melihatarray('x'=>'1/2/3/4/5', 'y'=>'100/200', 'z'=>'777')
/ (
dan) /
menghentikan preg_split agar tidak berfungsi. Saya harus menghapus spasi dan kemudian berfungsi seperti yang diharapkan (menggunakan PHP 7)Anda dapat mengambil string pertama, ganti semua
@
denganvs
menggunakanstr_replace
, lalu meledakvs
atau sebaliknya.sumber
(@|@!)
Sumber: php @ metehanarslan di php.net
sumber
Bagaimana kalau menggunakan
strtr()
untuk mengganti semua pembatas Anda yang lain dengan yang pertama?Agak tidak terbaca, saya kira, tetapi saya mengujinya sebagai berfungsi di sini.
One-liners ftw!
sumber
Tidak akan
strtok()
bekerja untukmusumber
Cukup Anda dapat menggunakan kode berikut:
sumber
Anda dapat mencoba solusi ini .... Ini berfungsi dengan baik
Sumber: http://www.phpdevtips.com/2011/07/exploding-a-string-using-multiple-delimiters-using-php/
sumber
Saya melakukannya dengan cara ini ...
sumber
Bagaimana dengan ini?
Dalam kasus Anda, Anda harus menggunakan Array untuk param $ delimiters. Maka dimungkinkan untuk menggunakan beberapa karakter sebagai satu pembatas.
Jika Anda tidak peduli tentang membuntuti spasi di hasil Anda, Anda dapat menghapus
array_map('trim', [...] )
bagian di baris kembali. (Tapi jangan menjadi quibbler dalam kasus ini. Tetappreg_split
di dalamnya.)Diperlukan Versi PHP: 5.3.0 atau lebih tinggi.
Anda bisa mengujinya di sini
sumber
Anda akan memiliki beberapa masalah (bagaimana jika Anda memiliki string ini: "vs @ apel" misalnya) menggunakan metode sepparating ini, tetapi jika kita mulai dengan menyatakan bahwa Anda telah memikirkan hal itu dan telah memperbaiki semua tabrakan yang mungkin, Anda hanya bisa mengganti semua kejadian dari
$delimiter[1]
untuk$delimiter[n]
dengan$delimiter[0]
, dan kemudian dibagi pada yang pertama?sumber
Jika pembatas Anda hanya karakter, Anda dapat menggunakan
strtok
, yang tampaknya lebih pas di sini. Perhatikan bahwa Anda harus menggunakannya denganwhile
loop untuk mencapai efek.sumber
Ini akan berhasil:
Seperti yang Anda lihat, itu pertama-tama menempelkan bagian yang meledak bersama dengan ruang, untuk kemudian memotongnya lagi, kali ini mengambil ruang bersamanya.
sumber