Perbedaan pertama:
Contoh menarik dari perilaku berbeda antara strtr
dan str_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);
?>
- Saya mengharapkan hasil: "ZDDB"
- Namun, ini mengembalikan: "ZDDD" (Karena B = D menurut array kita)
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 mengembalikan: "ZDDB"
Ini berarti str_replace
pendekatan yang lebih global untuk penggantian, sementara strtr
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:
string (3) "PHP"
string (27) "PHP: Hypertext Preprocessor"
Penjelasan utama:
Ini terjadi karena:
strtr : itu mengurutkan parameternya berdasarkan panjang, dalam urutan menurun, jadi:
- itu akan memberikan "lebih penting" ke yang terbesar, dan kemudian, karena teks subjek itu sendiri adalah kunci terbesar dari larik pengganti, itu akan diterjemahkan.
- karena semua karakter teks subjek telah diganti, prosesnya berakhir di situ.
str_replace : ini berfungsi dalam urutan kunci ditentukan, jadi:
- ia menemukan kunci "PHP" dalam teks subjek dan menggantinya dengan: "PHP: Hypertext Preprocessor", yang memberikan hasil:
“PHP: Hypertext Preprocessor: Hypertext Preprocessor”.
kemudian ia menemukan kunci berikutnya: "PHP: Hypertext Preprocessor" dalam teks yang dihasilkan dari langkah sebelumnya, sehingga akan diganti dengan "PHP", yang menghasilkan:
“PHP: Hypertext Preprocessor”.
tidak ada lagi kunci yang harus dicari, jadi penggantinya berakhir di situ.
strtr
dapat dengan mudah salah dibaca karenastrstr
sangat berbeda. Saya mulai berpikir saya disleksia. Tidak akan membuat kesalahan itu dengan str_replace.