@BjornBorn

Как через регулярное выражение сделать замену с использованием callback-функции?

Есть строка:

$str = '2 3 4 5 6';

С помощью функции preg_replace_callback нужно преобразовать строку так, чтобы чтобы вместо чисел стояли их квадраты.

Я попытался сделать:

$res = preg_replace_callback('#(\d+)#', function($match) {
    for ($i = 0; $i < count($match); $i++) {
        $match[$i] = pow($match[$i], 2);
    }
    return $match;
}, $str);

echo $res;


Выдает предупреждение: Предупреждение : преобразование массива в строку

Надо чтобы функция возвращала строку?
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
@maksam07
Надо чтобы функция возвращала строку?

да

$str = '2 3 4 5 6';

$res = preg_replace_callback( '#(\d+)#', function($match) {
        return pow($match[0], 2);
    }, $str
);

echo $res; // 4 9 16 25 36
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$str = '2 3 4 5 6';

$res = preg_replace_callback(
    pattern: '#(?P<number>\d+)#',
    callback: static fn(array $match) => pow(base: intval($match['number']), exp: 2),
    subject: $str,
);

echo $res; // 4 9 16 25 36
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы