Заменить обратный вызов массива - PullRequest
2 голосов
/ 05 марта 2012

У меня есть строка вроде:

"Hello ? my name is ? and i am ? years old." 

Каждое "?" является переменной, и я хочу заменить каждую переменную массивом. Итак, у меня есть этот массив:

$data = array('Mister,','Tom','30');

Итак, я ищу чистый способ преобразования всех ? по одинаковому индексу массива, чтобы я получил:

«Здравствуйте, мистер, меня зовут Том, мне 30 лет».

Также я хочу передать функцию, подобную ucfirst(), каждой записи массива при их замене.

У кого-нибудь есть идеи, как это сделать?

Ответы [ 4 ]

5 голосов
/ 05 марта 2012

Использование preg_replace_callback:

$str = "Hello ? my name is ? and i am ? years old.";
$data = array('Mister,','Tom','30');
$str = preg_replace_callback('/\?/', function($match) use(&$data) {
    return ucfirst(array_shift($data));
}, $str);
1 голос
/ 05 марта 2012

str_replace может сделать это (в комбинации с array_map:

$array = array('Mister,', 'Tom', '30');
$new_string = str_replace(array('?', '?', '?'),
    array_map(function($v) { return ucfirst($v); }, $array),
    $old_string
);
0 голосов
/ 05 марта 2012
$string = 'String ? etc etc';
$string = preg_replace("/?/",array_shift($data), $string, 1);
$string = preg_replace("/?/",array_shift($data), $string, 1);
$string = preg_replace("/?/",array_shift($data), $string, 1);

echo $string
0 голосов
/ 05 марта 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...