|
|
|
| Имеется примерно такие строки
402xxxxx524
4034xxxxx524
401xxx37524
40xxxx37524
нужно вместо "x" подставить число допустим "655" тогда выше приведённые строки должны быть такими
40200655524
403400655524
40165537524
40065537524
да и ещё нужно чтобы если чисел меньше чем количеств "x" то, должны вначале заполниться нулями | |
|
|
|
|
|
|
|
для: Петровичь
(04.04.2006 в 19:14)
| | посчитайте сначала количество иксов в строке, вычтите разницу между этим кол-вом и заменяемой строкой (655), конкотенируйте в начало строки "655" это количество нулей и простой заменой подмените подстрокустроку хххххх на 00655 | |
|
|
|
|
|
|
|
для: Лёлик
(04.04.2006 в 19:31)
| | мне пока не совсем понятно как должен выглядеть сам код, у меня были мысли сперва както скопировать символы что находятся перед "xxxx" и после них, а там их подставить но вот как вычисть число и подставить нули, млин, как же для меня всё это трудно, я был бы рад за вашу помощь | |
|
|
|
|
|
|
|
для: Петровичь
(04.04.2006 в 19:51)
| | во набрасал код, чую что можно и более элегантно сделать, но чего-то голова уже не варит
<?php
$str_a='655';// начальная подставляемая строка
$str_b='402xxxxx524';// наша строка (все строки можно хранить в массиве и его оьбходить или тащить из БД)
$str_c='';// строка с ведущими нулями
$count_x=substr_count($str_b,'x');// вычисляем число иксов
$dif=$count_x-strlen($str_a);//разность между кол-м иксов и подставляемой строки
if($dif > 0)for($i=0;$i<$dif;$i++){$str_c.='0';}// если расность положительная делаем строку с кол-м нулей
$str_c.=$str_a;// приклеиваем подставляемую строку
$str_c=preg_replace("/(x)/i",$str_c,$str_b,1);// подменяем получившеюся строку на место первого икса
$str_c=preg_replace("/x/i",'',$str_c);// удаляем оставшиеся иксы
//echo $str_c;
?>
|
можно конечно еще разрезать строку на три части, а потом склеить назад, но только вместо части с иксам нашу строку | |
|
|
|
|
|
|
|
для: Петровичь
(04.04.2006 в 19:14)
| |
<?php
$list = array ('402xxxxx524', '4034xxxxx524', '401xxx37524', '40xxxx37524');
$pattern = "^(\d+)(x+)(\d+)$";
$num = 655;
foreach($list as $item)
{
$ms = '';
if(preg_match("#$pattern#i", $item, $ms))
echo "<br>".$item. " => ".
($ms[1]. str_pad ("$num", strlen($ms[2]), '0', STR_PAD_LEFT). $ms[3]);
}
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(04.04.2006 в 20:24)
| | а если иксов меньне 4-х? | |
|
|
|
|
|
|
|
для: Лёлик
(04.04.2006 в 20:33)
| | ну и что? С тремя иксами не работает? | |
|
|
|
|
|
|
|
для: Trianon
(04.04.2006 в 20:38)
| | ему нужно нули подставлять только в том случае, если их больше чем 655, т.е. разность. к примеру если иксов 6 а длина 655 это три, тотна выходиде 000655, а у вас 000000655 | |
|
|
|
|
|
|
|
для: Лёлик
(04.04.2006 в 20:42)
| | Вы запускали скрипт, или только предполагаете, что он будет так работать? | |
|
|
|
|
|
|
|
для: Trianon
(04.04.2006 в 20:46)
| | где он разницу-то вычисляет, чего-то не пойму. | |
|
|
|
|
|
|
|
для: Лёлик
(04.04.2006 в 20:52)
| | смотрите описание str_pad | |
|
|
|
|
|
|
|
для: Trianon
(04.04.2006 в 20:52)
| | да, извиняюсь, чего-то протупил, пора идти спать | |
|
|
|