Как я могу конвертировать шаблоны во все их возможные комбинации - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь преобразовать числа, использующие переменные, во все возможные результаты. Ниже приведено несколько примеров использования телефонных номеров США (номера образцов):

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 ..

То, что у меня есть, обрабатывает последнюю цифру как переменную, но до чего-то не получается, и не обрабатывает диапазоныЯ бьюсь головой об стену по этому поводу, любые указания или помощь будут оценены.

<code>echo "<pre>";
        print_r(str_split((string)$extended['168']['pattern']));
        echo "
"; $ string = str_split ((string) $ extended ['9200'] ['pattern']); $newnumber ['168'] = array (); $ c = 0; $ append = 0; foreach ($ string как $ number) {if ($ number == "[") {$ append = 1; $ c2 = 0; continue;} elseif ($ number == "]") {$ append = 0; unset ($ c2); продолжить;} 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 ++;Продолжить;}} else {$ newnumber ['168'] [$ c] = $ number;}} $ c ++;} echo "
";
        print_r($newnumber['168']);
        echo "
";/ * foreach ($ newnumber ['168'] как $ num) {if (is_array ($ num)) {foreach ($ num как $ num1) {$ numbers [] = $ numstart. $ Num1;}} else {$ numstart. = $ num;}} * / echo "
";
        print_r($numbers);
        echo "
";

Мой вывод:

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
)

1 Ответ

0 голосов
/ 04 октября 2019

Хорошо, так что это, вероятно, НЕ самый чистый способ сделать это, но на тот случай, если кому-то понадобится сделать что-то подобное в будущем:

Это работает только для 10-значных чисел, и я не встроил ни одногообработка ошибок еще не завершена, но эта очистка начнется.

<code>$string = str_split((string)$value['pattern']);
                $newnumber[$key] = 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 == ".") {
                        continue;
                    } elseif ($number == "X") {
                        $newnumber[$key][$c]['0'] = 0;
                        $newnumber[$key][$c]['1'] = 1;
                        $newnumber[$key][$c]['2'] = 2;
                        $newnumber[$key][$c]['3'] = 3;
                        $newnumber[$key][$c]['4'] = 4;
                        $newnumber[$key][$c]['5'] = 5;
                        $newnumber[$key][$c]['6'] = 6;
                        $newnumber[$key][$c]['7'] = 7;
                        $newnumber[$key][$c]['8'] = 8;
                        $newnumber[$key][$c]['9'] = 9;
                    } else  {
                        if($append == 1) {
                            if($number == "-") {
                                $dash = 1; 
                                continue;
                            } elseif ($dash == 1) {
                                $s = $newnumber[$key][$c][$c2-1];
                                for ($s = $s+1; $s <= $number; $s++) {
                                    $newnumber[$key][$c][$c2] = $s;
                                    $c2++;
                                }
                                unset($s);
                                unset($dash);
                            } else {
                                $newnumber[$key][$c][$c2] = $number;
                                $c2++;
                                continue;
                            }
                        } else {
                            $newnumber[$key][$c][] = $number;
                        }
                    }
                    $c++;
                }
                /*echo "<pre>";
                print_r($newnumber[$key]);
                echo "
"; * / $ numbers = array (); // Обработка первой цифры $ d1 = 0; $ n1arr = array (); foreach ($ newnumber [$key] [0] как $ digit1) {$ n1arr [$ d1]. = $ digit1; $ d1 ++;} $ d2 = 0; $ n2arr = array (); foreach ($ newnumber [$ key] [1] как $digit2) {foreach ($ n1arr as $ n1n) {$ n2arr [$ d2] = $ n1n. $ digit2; $ d2 ++;}} $ d3 = 0; $ n3arr = array (); foreach ($ newnumber [$ key][2] как $ digit3) {foreach ($ n2arr как $ n2n) {$ n3arr [$ d3] = $ n2n. $ Digit3; $ d3 ++;}} $ d4 = 0; $ n4arr = array (); foreach ($newnumber [$ key] [3] как $ digit4) {foreach ($ n3arr как $ n3n) {$ n4arr [$ d4] = $ n3n. $ digit4; $ d4 ++;}} $ d5 = 0; $ n5arr = array () foreach ($ newnumber [$ key] [4] как $ digit5) {foreach ($ n4arr как $ n4n) {$ n5arr [$ d5] = $ n4n. $ digit5; $ d5 ++;}} $ d6 = 0;$ n6arr = array ();foreach ($ newnumber [$ key] [5] как $ digit6) {foreach ($ n5arr как $ n5n) {$ n6arr [$ d6] = $ n5n. $ Digit6;$ D6 ++;}} $ d7 = 0;$ n7arr = array ();foreach ($ newnumber [$ key] [6] как $ digit7) {foreach ($ n6arr как $ n6n) {$ n7arr [$ d7] = $ n6n. $ Digit7;$ D7 ++;}} $ d8 = 0;$ n8arr = array ();foreach ($ newnumber [$ key] [7] как $ digit8) {foreach ($ n7arr как $ n7n) {$ n8arr [$ d8] = $ n7n. $ Digit8;$ D8 ++;}} $ d9 = 0;$ n9arr = array ();foreach ($ newnumber [$ key] [8] как $ digit9) {foreach ($ n8arr как $ n8n) {$ n9arr [$ d9] = $ n8n. $ Digit9;$ D9 ++;}} $ d10 = 0;$ n10arr = array ();foreach ($ newnumber [$ key] [9] как $ digit10) {foreach ($ n9arr как $ n9n) {$ n10arr [$ d10] ['pattern'] = $ n9n. $ Digit10;$ n10arr [$ d10] ['description'] = $ extended [$ key] ['description'];$ n10arr [$ d10] ['translation'] = $ extended [$ key] ['translation'];$ n10arr [$ d10] ['prefix'] = $ extended [$ key] ['prefix'];$ D10 ++;}}
...