Preg_replace_callback bir geri çağırma işlevini belirtme?

3 Cevap php

Ben bu gibi bazı kod (bu basitleştirilmiş bir örnek) vardır:

function callback_func($matches) {
  return $matches[0] . "some other stuff";
}

function other_func($text) {
  $out = "<li>"; 
  preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);
  $out .= $desc ."</li> \r\n";
  return $out;
}

echo other_func("This is a _test");

Bu çıkış olmalıdır

<li>This is a _testsome other stuff</li>

ama ben sadece almak

<li>This is a _test</li>

Neyi yanlış yapıyorum / ne tuhaf sözler php tanrıları yatıştırmak için gereklidir?

3 Cevap

preg_replace_callback yerine dize değiştirebilirsiniz, ancak bunun yerine bir değiştirilmiş kopyasını döndürür. Aşağıdaki instread deneyin:

function other_func($text) {
    $out = "<li>"; 
    $out .= preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);
    $out .= "</li> \r\n";
    return $out;
}

Sorun $ dışarı değişkene işlevi çıktı ekleme asla konum olmasıdır. Yani anh_kars_islevi in ​​() kullanmak zorunda:

$out .= $matches[0] . "some other stuff";

Sonra çıktı sizin için dizeye sonucu katacak. Olduğu gibi, sadece bir değer döndüren ve onunla hiçbir şey yapıyoruz.

Bunu anladım. preg_replace_callback ben yaptım üstlendiği, özgün bir konuyu değiştirmek değildir. Ben değişiklik vardı

preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);

karşı

$desc = preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);