Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah saya boleh menukar rentetan yang dibatasi garis serong ke belakang kepada tatasusunan bersekutu dalam PHP?

Bagaimanakah saya boleh menukar rentetan yang dibatasi garis serong ke belakang kepada tatasusunan bersekutu dalam PHP?

DDD
DDDasal
2024-12-10 02:48:08772semak imbas

How can I convert a backslash-delimited string into an associative array in PHP?

Tukar Rentetan Berbatasan Terbalik kepada Tatasusunan Bersekutu

Dalam PHP, tugas biasa ialah memproses rentetan yang diformatkan dengan pasangan nilai kunci yang diasingkan oleh pemisah. Contoh biasa ialah rentetan yang dipisahkan dengan garis ke belakang, di mana pasangan kunci dan nilai dipisahkan dengan garisan ke belakang ().

Menggunakan preg_match_all dan array_combine

Satu kaedah yang berkesan melibatkan penggunaan fungsi preg_match_all untuk mengekstrak kedua-dua kunci dan nilai ke dalam tatasusunan berasingan, yang kemudiannya digabungkan menggunakan array_combine.

preg_match_all("/([^\\]+)\\([^\\]+)/", $string, $p);
$array = array_combine($p[1], $p[2]);

Corak regex ini memadankan mana-mana aksara bukan garis miring ke belakang ke dalam $p[1] (kunci) dan mana-mana aksara bukan garis miring ke belakang ke dalam $p[2] (nilai).

Menyesuaikan Pemisah Kunci/Nilai

Pendekatan ini boleh digeneralisasikan untuk mengendalikan pemisah nilai kunci:

preg_match_all("/ ([^:]+) : ([^,]+) /x", $string, $p);
$array = array_combine($p[1], $p[2]);

Cukup gantikan ":" dengan pemisah nilai kunci yang anda inginkan dan "," dengan pembatas pasangan yang anda inginkan.

Membenarkan Pemisah Pelbagai

Untuk membenarkan pembatas yang berbeza-beza, gunakan:

preg_match_all("/ ([^:=]+) [:=]+ ([^,+&]+) /x", $string, $p);

Ini membenarkan key=value, key2:value2, atau variasi serupa.

Ciri Tambahan

Anda boleh meningkatkan lagi pengekstrakan:

  • Kekangan Alphanumeric Kekunci: Pastikan kekunci adalah abjad angka.
  • Ruang Jalur/Petikan: Alih keluar ruang atau petikan yang tidak perlu.
  • Pengeluaran Gaya INI: Ekstrak data dalam format INI biasa (key=value).

Alternatif: parse_str

Untuk pengendalian mudah rentetan key=value&key2=value2, pertimbangkan untuk menggunakan parse_str dengan strtr:

parse_str(strtr($string, ":,", "=&"), $pairs);

Pertimbangan

  • preg_match_all array_combine: Sangat fleksibel, boleh disesuaikan dan sangat sesuai untuk yang tidak diketahui pembatas.
  • parse_str: Lebih ringkas dan dioptimumkan untuk pembatas yang diketahui seperti "&".
  • meletup depan: Pendekatan manual, selalunya lebih perlahan dan lebih bertele-tele .

Pilih kaedah yang paling sesuai berdasarkan keperluan anda dan tukar ganti.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar rentetan yang dibatasi garis serong ke belakang kepada tatasusunan bersekutu dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn