2016-04-22 2 views
2

у меня есть этот код:новообращенного preg_replace в preg_replace_callback ошибки модификатора

$key = preg_replace(
      '/(^|[a-z])([A-Z])/e', 
      'strtolower(strlen("\\1") ? "\\1_\\2" : "\\2")', 
      substr($method, 3) 
     ); 

я получаю предупреждение PHP (PHP 5.6), и я стараюсь, чтобы преобразовать его с preg_replace_callback:

$key = preg_replace_callback(
      '/(^|[a-z])([A-Z])/e', 
      function($m) { 
       return strtolower(strlen("\\{$m[1]}") ? "\\{$m[1]}_{$m[2]}" : "\\{$m[2]}"); 
      }, 
      substr($method, 3) 
     ); 

, но я получаю это ошибка:

Modifier /e cannot be used with replacement callback 

Может кто-нибудь помочь мне преобразовать его правильно?

Благодаря

+0

1) удалить модификатор 'é' при использовании' preg_replace_callback() '2) Есть ли простой' print_r ($ м), 'в анонимную функцию и посмотреть, что у вас есть там. Затем вы можете использовать '$ m' как обычный массив, как обычно. – Rizier123

ответ

3

Как сказано в комментарии, удалите модификатор e, я также думаю, что вам не нужны фигурные скобки.
Ваш код становится:

$key = preg_replace_callback(
     '/(^|[a-z])([A-Z])/', 
     function($m) { 
      return strtolower(strlen($m[1]) ? "$m[1]_$m[2]" : $m[2]); 
     }, 
     substr($method, 3) 
); 
Смежные вопросы