用数字替换字符

时间:2014-10-19 08:25:14

标签: php

我正在做这个代码

示例此值的字符串

z12z

我想生成它

0120
0121
0122
... until 0129

然后

1120
1121
1122

... until 1129

直到9129,它有点像两个四循环,但我不知道如何实现它。

问题是z可以在任何地方,它可以是zzzz

它将在哪里

0000 until 9999

或者它也可以是z0z0,z可以是任何地方。我应该使用什么样的方法。

谢谢!

我正在使用php

对于每个字母'z'的出现,我需要做一个for循环来生成可能的数字,从0到9,你可以说z是for循环0到9,例如z555将产生0555,1555 ,2555,3555,4555,5555,6555,7555,8555,9555,问题是z可能出现0到4的可能性,如z555,zz55,zzz5,zzzz和z位置是随机的,我需要生成可能的z数字输出

z位置可以是55z5,5z55,5zz5。它没有固定位置。

1 个答案:

答案 0 :(得分:1)

<?php

$numbers = array();
for ($i = 0; $i <= 9; $i++){
    for ($j = 120; $j <= 129; $j++){
        $numbers[] = $i . $j;
    }
}

print_r('<pre>');
print_r($numbers);

采用z char的更好答案是:

<?php
function strReplaceNth($search, $replace, $subject, $nth)
{
    $found = preg_match_all('/' . preg_quote($search) . '/', $subject, $matches, PREG_OFFSET_CAPTURE);
    if (false !== $found && $found > $nth) {
        return substr_replace($subject, $replace, $matches[0][$nth][1], strlen($search));
    }

    return $subject;
}

function cleanup($numbers, $char)
{
    $tmp = array();
    for ($i = 0; $i < count($numbers); $i++){
        if (strpos($numbers[$i], $char) === false){
            $tmp[] = $numbers[$i];
        }
    }

    return $tmp;
}

function generateNumber($numbers, $char)
{
    if (!is_array($numbers)){
        if (strpos($numbers, $char) === false){
            return array($numbers);
        } else {
            $tmp = $numbers;
            $numbers = array();
            for ($j = 0; $j <= 9; $j++){
                $numbers[] = strReplaceNth($char, $j, $tmp, 0);
            }
            return generateNumber($numbers, $char);
        }
    } else {
        for ($i = 0; $i < count($numbers); $i++){
            if (strpos($numbers[$i], $char) === false){
                return cleanup($numbers, $char);
            } else {
                $numbers = array_merge($numbers, generateNumber($numbers[$i], $char));
            }
        }
        return generateNumber($numbers, $char);
    }
}

function getCharPos($string, $char)
{
    $pos = array();
    for ($i = 0; $i < strlen($string); $i++){
        if (substr($string, $i, 1) == $char){
            $pos[] = $i;
        }
    }

    return $pos;
}

$string = 'z12z';
$char = 'z';
$occurences = getCharPos($string, $char);
$numbers = array();

if (count($occurences) > 0){
    $numbers = generateNumber($string, $char);
} else {
    $numbers[] = $string;
}

print_r('<pre>');
print_r($numbers);die();