如何将模式转换为所有可能的组合

问题描述 投票:0回答:1

我正在尝试将使用变量的数字转换为所有可能的结果。以下是一些使用美国电话号码(示例号码)的示例:

203618723 [149] 7049164XXX 651280477 [5-9] 203618717 [01-7]20361872 [149] X

输出应为一个数组,如:

2036187231 2036187234 2036187239 7049164000 7049164001 7049164002 .. 7049164010 7049164011 .. 7049164100 7047167101 .. 6512804775 6512804776 6512804777 6512804778 6512804779 2036187170 2036187171 2036187172 2036187273 .. 2036187210 2036187211 2036187212 .. 2036187240 2036187241 2036187242 .. 2036187290 2036187291 ..

到目前为止,我处理的最后一个数字是变量,但是在此之前没有任何结果,并且不处理范围,我一直在碰壁,任何指针或帮助都将不胜感激。

echo "<pre>";
        print_r(str_split((string)$extended['168']['pattern']));
        echo "</pre>";

        $string = str_split((string)$extended['9200']['pattern']);
        $newnumber['168'] = array();
        $c = 0;
        $append = 0;
        foreach($string as $number) {
            if($number == "[") {
                $append = 1;
                $c2 = 0;
                continue;
            } elseif ($number == "]") {
                $append = 0;
                unset($c2);
                continue;
            } elseif ($number == "X") {
                $newnumber['168'][$c]['0'] = 0;
                $newnumber['168'][$c]['1'] = 1;
                $newnumber['168'][$c]['2'] = 2;
                $newnumber['168'][$c]['3'] = 3;
                $newnumber['168'][$c]['4'] = 4;
                $newnumber['168'][$c]['5'] = 5;
                $newnumber['168'][$c]['6'] = 6;
                $newnumber['168'][$c]['7'] = 7;
                $newnumber['168'][$c]['8'] = 8;
                $newnumber['168'][$c]['9'] = 9;
            } else  {
                if($append == 1) {
                    if($number == "-") {

                    } else {
                        $newnumber['168'][$c][$c2] = $number;
                        $c2++;
                        continue;
                    }
                } else {
                    $newnumber['168'][$c] = $number;
                }
            }
            $c++;
        }
        echo "<pre>";
        print_r($newnumber['168']);
        echo "</pre>";



        /*foreach ($newnumber['168'] as $num) {
            if(is_array($num)) {
                foreach ($num as $num1) {
                    $numbers[] = $numstart . $num1;
                }
            } else {
                $numstart .= $num;
            }
        }*/
        echo "<pre>";
        print_r($numbers);
        echo "</pre>";

我的输出是:

Array
(
    [0] => 2
    [1] => 0
    [2] => 3
    [3] => 6
    [4] => 1
    [5] => 8
    [6] => 7
    [7] => 2
    [8] => 3
    [9] => [
    [10] => 1
    [11] => 4
    [12] => 9
    [13] => ]
)
Array
(
    [0] => 7
    [1] => 0
    [2] => 4
    [3] => 9
    [4] => 1
    [5] => 6
    [6] => 4
    [7] => 9
    [8] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 2
            [3] => 3
            [4] => 4
            [5] => 5
            [6] => 6
            [7] => 7
            [8] => 8
            [9] => 9
        )

    [9] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 2
            [3] => 3
            [4] => 4
            [5] => 5
            [6] => 6
            [7] => 7
            [8] => 8
            [9] => 9
        )

)
Array
(
    [0] => 704916490
    [1] => 704916491
    [2] => 704916492
    [3] => 704916493
    [4] => 704916494
    [5] => 704916495
    [6] => 704916496
    [7] => 704916497
    [8] => 704916498
    [9] => 704916499
    [10] => 704916490
    [11] => 704916491
    [12] => 704916492
    [13] => 704916493
    [14] => 704916494
    [15] => 704916495
    [16] => 704916496
    [17] => 704916497
    [18] => 704916498
    [19] => 704916499
)
php php-5.6
1个回答
0
投票

好,所以这可能不是最干净的方法,以防万一将来有人需要做类似的事情:

这仅适用于10位数字,并且我还没有内置任何错误处理,但是清除将立即开始。

© www.soinside.com 2019 - 2024. All rights reserved.