SORU
18 Kasım 2011, Cuma


Strtr vs kullanma str_replace?

Zor zamanlar strtr str_replace tercih ya da tam tersi olur, anlamakta güçlük çekiyorum. Mümkün olan dizeleri değiştirilir sırasını ters olsa da aynı sonuçlar iki fonksiyonu kullanarak elde değil gibi görünüyor. Örneğin:

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');

Bu çıkışlar

YeXY XYring
YeZ Zring
YeXY XYring
YeZ Zring

Sözdizimi dışında, birini kullanarak herhangi bir yararı var mı? İstenilen sonucu elde etmek için yeterli bir yerlerde bir dava var mı?

CEVAP
18 Kasım 2011, Cuma


İlk fark:

strtr str_replace arasında farklı bir davranış ilginç bir örnek PHP Kılavuzu yorum bölümünde

<?php
$arrFrom = array("1","2","3","B");
$arrTo = array("A","B","C","D");
$word = "ZBB2";
echo str_replace($arrFrom, $arrTo, $word);
?>
  • Sonuç olarak beklerdim: "" . ZDDB
  • Ancak, bu dönüş: "ZDDD" (Çünkü B = D bizim diziye göre)

Bu işi yapmak için kullan "strtr" yerine:

<?php
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");
$word = "ZBB2";
echo strtr($word,$arr);
?>
  • Bu verir: "" . ZDDB

Bu str_replace strtr sadece karakter tek tek çevirir süre değiştirmeleri için daha genel bir yaklaşım olduğu anlamına gelir.


Başka bir fark:

Verilen aşağıdaki kodu (PHP String Replacement Speed Comparison alınan):

<?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);
?>

Metin sonuç çizgiler olacak:

string(3) "" . PHP ^br> string(27) "PHP:" . yazı İşlemcisi


Ana açıklama:

Bu, çünkü olur:

  • strtr- azalan, bu yüzden : boy farkla parametrelerini sıralar

    1. "en büyüğü ve konu Metni olarak kendini yenileme dizinin en büyük anahtarı çevrilmiş olur. sonra da "daha fazla önem verecek
    2. tabi tüm metnin karakter almıştır çünkü, işlem orada biter.
  • str_replace: anahtarlar tanımlanır, yani: sırayla çalışıyor

    1. anahtar bulur “” tabi metin ve devam eder: “PHP:” ne sonucu verir:yazı İşlemcisi PHP

      “PHP: yazı İşlemcisi:”. yazı İşlemcisi

    2. sonra ileri tuşuna bulur: “PHP: yerini alır” eski adım ortaya çıkan metinde, "sonuç olarak verir:",. PHP yazı İşlemcisi

      “PHP:”. yazı İşlemcisi

    3. aramak için bir anahtar daha var, yerine orada biter.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AndyMcMillinTV

    AndyMcMillin

    6 HAZİRAN 2007
  • Damian Winter

    Damian Winte

    27 ŞUBAT 2007
  • superflyy88

    superflyy88

    8 ŞUBAT 2009