Saya mengalami kesulitan memahami kapan strtr
lebih baik str_replace
atau sebaliknya. Tampaknya dimungkinkan untuk mencapai hasil yang sama persis menggunakan salah satu fungsi, meskipun urutan penggantian substring dibalik. Sebagai contoh:
echo strtr('test string', 'st', 'XY')."\n";
echo strtr('test string', array( 's' => 'X', 't' => 'Y', 'st' => 'Z' ))."\n";
echo str_replace(array('s', 't', 'st'), array('X', 'Y', 'Z'), 'test string')."\n";
echo str_replace(array('st', 't', 's'), array('Z', 'Y', 'X'), 'test string');
Output ini
YeXY XYring
YeZ Zring
YeXY XYring
YeZ Zring
Selain sintaks, apakah ada manfaat menggunakan salah satu dari yang lain? Adakah kasus di mana seseorang tidak akan cukup untuk mencapai hasil yang diinginkan?
php
string
str-replace
strtr
andrewtweber
sumber
sumber
strtr
dapat dengan mudah salah dibaca karenastrstr
sangat berbeda. Saya mulai berpikir saya disleksia. Tidak akan membuat kesalahan itu dengan str_replace.Jawaban:
Perbedaan pertama:
Contoh menarik dari perilaku berbeda antara
strtr
danstr_replace
ada di bagian komentar di Manual PHP:<?php $arrFrom = array("1","2","3","B"); $arrTo = array("A","B","C","D"); $word = "ZBB2"; echo str_replace($arrFrom, $arrTo, $word); ?>
Untuk membuat ini berfungsi, gunakan "strtr" sebagai gantinya:
<?php $arr = array("1" => "A","2" => "B","3" => "C","B" => "D"); $word = "ZBB2"; echo strtr($word,$arr); ?>
Ini berarti
str_replace
pendekatan yang lebih global untuk penggantian, sementarastrtr
hanya menerjemahkan karakter satu per satu.Perbedaan lainnya:
Diberikan kode berikut (diambil dari Perbandingan Kecepatan Penggantian String PHP ):
<?php $text = "PHP: Hypertext Preprocessor"; $text_strtr = strtr($text , array("PHP" => "PHP: Hypertext Preprocessor" , "PHP: Hypertext Preprocessor" => "PHP")); $text_str_replace = str_replace(array("PHP", "PHP: Hypertext Preprocessor") , array("PHP: Hypertext Preprocessor", "PHP") , $text); var_dump($text_strtr); var_dump($text_str_replace); ?>
Baris teks yang dihasilkan adalah:
Penjelasan utama:
Ini terjadi karena:
strtr : itu mengurutkan parameternya berdasarkan panjang, dalam urutan menurun, jadi:
str_replace : ini berfungsi dalam urutan kunci ditentukan, jadi:
kemudian ia menemukan kunci berikutnya: "PHP: Hypertext Preprocessor" dalam teks yang dihasilkan dari langkah sebelumnya, sehingga akan diganti dengan "PHP", yang menghasilkan:
tidak ada lagi kunci yang harus dicari, jadi penggantinya berakhir di situ.
sumber
strtr
tidak akan menggantikan teks yang disisipkan oleh penggantian sebelumnya.strtr('foo', array('oo' => 'ie', 'e' => 't'))
kembali'fie'
daripada'fit'
sepertistr_replace
halnya. Oleh karena itu, secara otomatis mengatasi masalah yang diangkat oleh @Pies.Itu tidak selalu benar dan tergantung pada pencarian dan penggantian data yang Anda berikan. Misalnya di mana dua fungsi berbeda lihat: Apakah PHP str_replace memiliki batas lebih dari 13 karakter?
strtr
tidak akan menggantikan bagian dari string yang telah diganti -str_replace
akan menggantikan dalam menggantikan.strtr
akan mulai dengan kunci terpanjang terlebih dahulu jika Anda memanggilnya dengan dua parameter -str_replace
akan mengganti dari kiri ke kanan.str_replace
dapat mengembalikan jumlah penggantian yang dilakukan -strtr
tidak menawarkan nilai hitungan seperti itu.sumber
Saya rasa
strtr
memberikan penggantian yang lebih fleksibel dan bersyarat jika digunakan dengan dua argumen, misalnya: jika string 1, ganti dengan a, tetapi jika string 10, ganti dengan b. Trik ini hanya bisa dicapai olehstrtr
.$string = "1.10.0001"; echo strtr($string, array("1" => "a", "10" => "b")); // a.b.000a
lihat: Php Manual Strtr .
sumber
Pemberitahuan di STRTR manual-- Deskripsi string strtr (string $ str, string $ from, string $ to) string strtr (string $ str, array $ replace_pairs) Jika diberi tiga argumen, fungsi ini mengembalikan salinan str di mana ...
STR_REPLACE-- ... Jika pencarian atau penggantian adalah array, elemennya akan diproses terlebih dahulu hingga terakhir . ...
STRTR setiap belokan TIDAK berpengaruh ke berikutnya, TAPI STR_REPLACE melakukannya.
sumber