我正在做这个代码
示例此值的字符串
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。它没有固定位置。
答案 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();