За последние 24 часа нас посетили 55344 программиста и 1725 роботов. Сейчас ищут 856 программистов ...

Дайте функций перебора

Тема в разделе "PHP для новичков", создана пользователем drakonik999, 19 ноя 2017.

  1. drakonik999

    drakonik999 Активный пользователь

    С нами с:
    5 сен 2017
    Сообщения:
    156
    Симпатии:
    0
    Есть строка
    a = "а б в г";
    как мне перебрать все возможные комбинации?
    то есть
    a = а
    а = аб
    а = бв
    а = вг
    а = в
    Все варианты переьрать, но чтобы буквы были по порядку то есть чтобы не бы такого
    а = аг
    а = вб и тд
     
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Можно сделать строку без пробелов и функцией mb_substr() вырезать последовательно фрагменты из строки в двух циклах.
    В первом итерировать смещение от начала строки, а во втором - длину фрагмента.
     
  3. drakonik999

    drakonik999 Активный пользователь

    С нами с:
    5 сен 2017
    Сообщения:
    156
    Симпатии:
    0
    Если я уберу пробелы как он поймет где отдельные слова? это пример. А если будет строка "катя вова вася" как мне его перебрать?
     
  4. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @drakonik999, так это из предыдущего Вашего вопроса?
    Тогда explode() и те же два цикла. Но необязательно для explode использовать пробел. При склеивании элементов можно использовать пробел в качестве клея.
    PHP:
    1. $a = 'вася෴петя෴катя';
    2. $b = explode('෴', $a);
    3. $c = implode(' ', $b);
     
    #4 Maputo, 19 ноя 2017
    Последнее редактирование: 19 ноя 2017
  5. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Пример взят с ресурса stackoverflow,особо не вникал ,но думаю твою задачу он решает:
    PHP:
    1. function depth_picker($arr, $temp_string, &$collect) {
    2.     if ($temp_string != "")
    3.         $collect []= $temp_string;
    4.  
    5.     for ($i=0; $i<count($arr);$i++) {
    6.         $arrcopy = $arr;
    7.         $elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element
    8.         if (count($arrcopy) > 0) {
    9.             depth_picker($arrcopy, $temp_string ." " . $elem[0], $collect);
    10.         } else {
    11.             $collect []= $temp_string. " " . $elem[0];
    12.         }
    13.     }
    14. }
    15.  
    16. $collect = array();
    17. depth_picker(explode(' ','а б в г'), "", $collect);
    18. print_r($collect);
    Код (Text):
    1. Array
    2. (
    3.     [0] =>  а
    4.     [1] =>  а б
    5.     [2] =>  а б в
    6.     [3] =>  а б в г
    7.     [4] =>  а б г
    8.     [5] =>  а б г в
    9.     [6] =>  а в
    10.     [7] =>  а в б
    11.     [8] =>  а в б г
    12.     [9] =>  а в г
    13.     [10] =>  а в г б
    14.     [11] =>  а г
    15.     [12] =>  а г б
    16.     [13] =>  а г б в
    17.     [14] =>  а г в
    18.     [15] =>  а г в б
    19.     [16] =>  б
    20.     [17] =>  б а
    21.     [18] =>  б а в
    22.     [19] =>  б а в г
    23.     [20] =>  б а г
    24.     [21] =>  б а г в
    25.     [22] =>  б в
    26.     [23] =>  б в а
    27.     [24] =>  б в а г
    28.     [25] =>  б в г
    29.     [26] =>  б в г а
    30.     [27] =>  б г
    31.     [28] =>  б г а
    32.     [29] =>  б г а в
    33.     [30] =>  б г в
    34.     [31] =>  б г в а
    35.     [32] =>  в
    36.     [33] =>  в а
    37.     [34] =>  в а б
    38.     [35] =>  в а б г
    39.     [36] =>  в а г
    40.     [37] =>  в а г б
    41.     [38] =>  в б
    42.     [39] =>  в б а
    43.     [40] =>  в б а г
    44.     [41] =>  в б г
    45.     [42] =>  в б г а
    46.     [43] =>  в г
    47.     [44] =>  в г а
    48.     [45] =>  в г а б
    49.     [46] =>  в г б
    50.     [47] =>  в г б а
    51.     [48] =>  г
    52.     [49] =>  г а
    53.     [50] =>  г а б
    54.     [51] =>  г а б в
    55.     [52] =>  г а в
    56.     [53] =>  г а в б
    57.     [54] =>  г б
    58.     [55] =>  г б а
    59.     [56] =>  г б а в
    60.     [57] =>  г б в
    61.     [58] =>  г б в а
    62.     [59] =>  г в
    63.     [60] =>  г в а
    64.     [61] =>  г в а б
    65.     [62] =>  г в б
    66.     [63] =>  г в б а
    67. )
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?php
    2. $symbols = ["а", "б", "в", "г"];
    3. $vars =[];
    4. while(count($vars) < 24) {
    5.   $vars[implode(' ', $symbols)] = 1;
    6.   shuffle($symbols);
    7. }
    8. $vars = array_keys($vars);
    9. sort($vars);
    10. print_r($vars);
    Код (Text):
    1. Array
    2. (
    3.     [0] => а б в г
    4.     [1] => а б г в
    5.     [2] => а в б г
    6.     [3] => а в г б
    7.     [4] => а г б в
    8.     [5] => а г в б
    9.     [6] => б а в г
    10.     [7] => б а г в
    11.     [8] => б в а г
    12.     [9] => б в г а
    13.     [10] => б г а в
    14.     [11] => б г в а
    15.     [12] => в а б г
    16.     [13] => в а г б
    17.     [14] => в б а г
    18.     [15] => в б г а
    19.     [16] => в г а б
    20.     [17] => в г б а
    21.     [18] => г а б в
    22.     [19] => г а в б
    23.     [20] => г б а в
    24.     [21] => г б в а
    25.     [22] => г в а б
    26.     [23] => г в б а
    27. )
    Из 4 букв вариантов не много