2

У меня есть этот код из приложения в PHP 5.4:preg_replace, preg_replace_callback и массив для преобразования строки

$rightKey = preg_replace(array(
       "/(_)(\p{L}{1})/eu", 
       "/(^\p{Ll}{1})/eu" 
      ), array(
       "mb_strtoupper('\\2', 'UTF-8')", 
       "mb_strtoupper('\\1', 'UTF-8')" 
      ), $key); 

Это не работает хорошо, потому что preg_replace является устаревшим. Я сделал некоторые исследования и превратил его в:

$rightKey = preg_replace_callback(array(
       "/(_)(\p{L}{1})/u", 
       "/(^\p{Ll}{1})/u" 
      ), function($m) { return array(
       "mb_strtoupper('\\2', 'UTF-8')", 
       "mb_strtoupper('\\1', 'UTF-8')" 
      ); }, $key); 

Я изменил функцию preg_replace_callback, я удалил «е», и я добавил функцию обратного вызова.

Но теперь у меня есть:

Array to string conversion 

И я действительно не знаю, как адаптировать функцию обратного вызова, так что работает ^^.

Спасибо :),

ответ

1

Функция должна возвращать строку, а не массив, это та же функция для каждого матчей:

$key = 'abc _def'; 
$rightKey = preg_replace_callback(array(
      "/_(\p{L})/u", 
      "/(^\p{Ll})/u" 
     ), 
     function($m) { 
      return mb_strtoupper($m[1], 'UTF-8'); 
     }, 
     $key); 
echo $rightKey; 

Выход:

Abc Def 
Смежные вопросы