preg_replace замена на случайное число php

Как заменить то, что нашло регулярное выражение, на случайное число от 0 до 9? У меня есть строка и я использовал rand но выводит одну и ту же цифру на всю строку

 $phoneMask = "+7 (9xx) xxx-xx-xx";
 echo $inputData; 
 $pg = rand(1,9); 

 echo preg_replace('/x/', $pg, $phoneMask);

Ответы (1 шт):

Автор решения: Talleyran

Потому что вам надо генерировать новую цифру для каждого найденного совпадения в цикле. Но для краткости можно так:

 $phoneMask = "+7 (9xx) xxx-xx-xx";

 echo preg_replace_callback('/x/', function($matches) {
    return rand(1,9);
 }, $phoneMask);

UPD

Или если версия PHP >= 7.4, то можно использовать стрелочную функцию и написать ещё короче:

$phoneMask = "+7 (9xx) xxx-xx-xx";
echo preg_replace_callback('/x/', fn() => rand(1,9) , $phoneMask);
→ Ссылка