2013-04-29 3 views
1

Я пытаюсь вывести определенное количество нулей в зависимости от количества цифр. Мой код не выводит то, что я хочу.PHP str_pad и strlen в preg_replace

$x = '12345'; 
$y = preg_replace('/(\d+)/', str_pad('',(12-strlen("$1")),0), $x); 
echo "y = $y"; 

# expected output: y = 0000000 (7 zeros) 
# output: y = 0000000000 (10 zeros) 
+2

Вам нужно будет http://php.net/manual/en/function.preg-replace-callback.php для это –

ответ

2

Как dev-null-dweller сказал в комментарии, вы должны использовать preg_replace_callback():

// This requires PHP 5.3+ 
$x = '12345'; 
$y = preg_replace_callback('/\d+/', function($m){ 
    return(str_pad('', 12 - strlen($m[0]), 0)); 
}, $x); 
echo "y = $y"; 
+1

Спасибо вам обоим. Это хорошо работает. Я не знал, как использовать функцию preg_replace_callback. В качестве примера используется – user2001487

1

Я сделал это, который работает:

<?php 
$x = '12345'; 
$y = str_pad(preg_replace('/(\d+)/', "0", $x), 12 - strlen($x), "0", STR_PAD_LEFT); 
echo "y = $y"; 

Существует также это регулярное выражение версия тоже:

$y = str_pad(preg_replace('/\d/', "0", $x), 12 - strlen($x), "0", STR_PAD_LEFT); 

Существует также это, если вы wan't конечный результат выглядеть следующим образом: 0

$y = str_pad($x, 7, "0", STR_PAD_LEFT); 
+0

$ x. значение в strlen должно быть результатом поисковой строки. – user2001487