Ben bir şekilde bu yedek preg_replace_callback bir geri arama içinde yer alıyor biliyor musun?

3 Cevap php

I preg_replace_callback dize içinde belirli belirteçleri yerine kullanıyorum. Ama bunun dışında gerçek belirteci o belirteç, ilk konu dize ikinci veya üçüncü olup olmadığını da bilmek gerekir. Bu bilgi erişmek için herhangi bir yolu var mı?

Ben değiştirmeleri sayar $count (http://php.net/manual/en/function.preg-replace-callback.php) preg_replace_callback tanımında bir argüman, buldum, ama geri arama içinde erişilebilir olup olmadığından emin değilim. Tarif edildiği bağlamda kullanım herhangi biri, örneğin?

3 Cevap

Tüm değiştirmeleri yapılır sonra $count üzerinden değişken sadece ayarlanır. Bunun yerine, bir statik değişkeni deneyin:

function repl($matches) {
    static $count = 0;
    ++$count;
    ...
}
preg_replace_callback('/.../', 'repl', $haystack);

Her zaman sayısını tutmak için yerel olmayan bir değişkeni oluşturabilirsiniz.

Php 5.3 + ile de kullanabileceğiniz bir closure (yerine global veya statik değişken)

$counter = 0
preg_replace_callback('/.../', function($matches) use(&$counter) {
  ++$counter;
  ...
  },  $haystack
);