从字符串的x位置替换特定字符


Replace a particular character from a string from the x position of the character

我在替换特定字符时遇到问题。

示例1:格式:xxx xxx xxx如果我在字段中输入6953并点击提交我需要像一样的结果

000-006-953

示例2:格式:1axxxx-xxx如果我在字段中输入6953并点击提交我需要像一样的结果

1a0-006-953

示例3:格式:1ax xxx xxs如果我在字段中输入6953并点击提交我需要像一样的结果

1a0-069-53s

格式将是动态的,结果将基于格式和输入值。

我试过这个代码

$a = '1axxxxx99';

$str = 6938;

$f_str = str_pad($str, strlen($a), "0", STR_PAD_LEFT);
for ($i = count($c) - 1; $i >= 0; $i--) {
    $f_str = substr_replace($f_str, '-', '-' . $c[$i], 0);
}
echo $f_str;

这是我要走的路:

$formats = array(
    'xxx-xxx-xxx',
    '1ax-xxx-xxx',
    '1ax-xxx-xxs',
);
$data = '6953';
foreach($formats as $format) {
    echo "$format --> ";
    $j = strlen($data)-1;
    for($i=strlen($format)-1; $i>=0 ; $i--) {
        if ($format[$i] == 'x') {
            if ($j >= 0) {
                $format[$i] = $data[$j];
                $j--;
            } else {
                $format[$i] = 0;
            }
        }
    }
    echo "$format'n";
}

输出:

xxx-xxx-xxx --> 000-006-953
1ax-xxx-xxx --> 1a0-006-953
1ax-xxx-xxs --> 1a0-069-53s
// For testing
$joker = '*';
$format = '1a**-***-***';
$input = 6589; // work with '6589' too
// Code start here
$input .= '';
$result = $format;
$i = strlen($format)-1;
$j = strlen($input)-1;
while($i > -1) {
    if($result[$i] === $joker) {
        if($j > -1) {
            $result[$i] = $input[$j];
            --$j;
        }
        else {
            $result[$i] = '0';
        }
    }
    --$i;
}
// Output for test
echo $result;