Zaten cevabı var:
Alternatif bir döngü kullanabilirsiniz. Bu sadece varsayım hatalarınızdaki yorumlardan daha iyi açıklamak içindir.
$1
birinci parametrenin bir sonucu değildir, bu preg_replace
kendisi sadece kullanılan bir tutucudur. Kullanımınız ayrıca komutların önceliğini de çağırır. Başka bir deyişle
, bu kodu denerseniz: Bu çıktıyı elde
$text = 'Lorem test8 Dolor';
function test($arg) { echo $arg.PHP_EOL; }
$text = preg_replace('/test([0-9]+)/i', test("$1"), $text);
echo $text;
: o zaman
$1
Lorem Dolor
Gördüğünüz gibi, ilk argüman değerlendirilir, sonuç preg_replace
: test()
işlevi tarafından kullanılan $1
(ve dizininizle aynı şekilde) alırsınız, 8
retrie preg_replace
ile ved; daha sonra preg_replace
, ikinci bağımsız değişkende döndürülen değerle eşleşen alt dizeyi değiştirin: Yukarıdaki durumda test()
, hiçbir şey döndürmez, bu nedenle değiştirme hiçbir şey değildir. Bu kod ile
:
Lorem [8] Dolor
test()
çünkü döner [$1]
ve değiştirme işlemini gerçekleştirmek için preg_replace
tarafından kullanılabilir:
function test() { return '[$1]'; }
$text = preg_replace('/test([0-9]+)/i', test(), $text);
çıkan dizedir.
$array["$1"] = 'Ipsum';
$text = preg_replace('/test([0-9]+)/i', $array["$1"], $text);
son metindir: Belirli bir durumda
, yedek sana bu tür bir senaryo varsa sadece gerçekleşmesi
Lorem Ipsum Dolor
Bu değil istediğiniz sonucu ancak - Daha önce de belirtildiği gibi - zaten cevabınız var ...
'preg_replace_callback()' işlevini kullanmak ve diziyi 'use()' ile iletmek için, – Rizier123
preg_replace için ikinci argüman, $ n biçiminde referanslar içerebilecek bir değiştirme dizgisini alır. Bunlar php değişkenleri değildir, böylece onları istediğiniz gibi kullanamazsınız. – georaldc