За последние 24 часа нас посетили 21022 программиста и 1134 робота. Сейчас ищут 528 программистов ...

Генерация массива

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

Метки:
  1. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    PHP:
    1. $mchislo = 5;//моя цифра
    2.  
    3. echo generate_password($mchislo);
    4. function generate_password($number = 0) {
    5.     if ($number === 0) {
    6.         echo "Вы не указали значение";
    7.         return false;
    8.     }
    9.     $index = 0;
    10.     $arr = array('1','2','3','4','5','6','7','8','9','0','11','12');
    11.     if ($arr[$index] == $number) return $arr[$index];
    12.     $pass = "";
    13.     while($arr[$index] != $number) {
    14.         $index = rand(0, count($arr) - 1);
    15.         $pass .= " ".$arr[$index];
    16.        
    17.     return $pass;
    18. }
    Ребят подскажите, мой код выводить рандомно цифры из массива пока не выпадет мое число, но я не могу понять как сделать, что бы генерировалось не одно число а 6 , к примеру сейчас у меня вывод 8 4 2 8 0 2 9 7 4 3 1 3 6 12 2 12 4 5,

    а мне нужно задать $mchislo = 555555;
    и что бы выводилось 122343 433533 555555

    и совпадение передать переменной
     
  2. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @Владимир11 Задача какая, сгенерировать пароль состоящий только из цифр, длинной 18 символов?

    точнее длинной которой укажет пользователь?

    Просто объясни что ты хочешь в конечном итоге =)
     
  3. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    мне нужно делать цикл по этому условию $arr[$index]!=$number, оно у мненя работает но я не знаю как указать длину вывода сейчас работает с 1 цифрой а мне нужно что бы длина была 6 цифр
    --- Добавлено ---
    нет не 18 а 6 это пример рандомного цикла пока не выпала 5 ка
     
  4. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    И каков шанс совпадения 6 цифр подряд?
    То есть когда они должны совпасть, даже их твоего массива
    PHP:
    1. $arr = array('1','2','3','4','5','6','7','8','9','0','11','12');
    в математике не очень?)
     
  5. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    подскажи может нужно как то формировать из этого массива $arr=array('1','2','3','4','5','6','7','8','9','0','11','12'); такой $arr=array('123456','223456','323456','423456','523456','623456','723456','823456','923456','023456','1123456','1223456'............'121212121212'); и из него делать цикл на совпадение?
    --- Добавлено ---
    можно и без шанса
     
  6. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Убери программирование, просто подумай, у тебя есть набор цифр, 1 цифра совпадет быстро, две подряд не очень быстро, а шесть когда?)

    Я тебя еще раз спрашиваю, в чем смысл, что ты хочешь в конечном итоге, в чем твоя задумка?
    Я спрашиваю потому что то что ты хочешь возможно делается совсем по другому, без массивов.
     
  7. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    очень долго...)
     
  8. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Пиши, мы тут подождем.

    Пользователь ввел шесть цифр, что на выходе ему нужно?

    Я не думаю что на выходе ему нужно бесконечное число.
     
  9. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    циклом сгенерировать 6 цифр до момента совпадения
     
  10. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Тогда смотри, Твой массив должен формироваться после того как человек задал 6 цифр, и в этом массиве обязательно должен быть набор его цифр. Чтобы когда нибудь совпали. Длинна массива тоже должна быть по факту фиксированной.

    Сейчас напишу пример. Тогда в этом будет хоть какой то смысл
     
  11. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    PHP:
    1. $mchislo = 5;//число которое введет юзер
    2. echo generate_password($mchislo);
    3. function generate_password($number = 0) {
    4.     if ($number === 0) {
    5.         echo "Вы не указали значение";
    6.         return false;
    7.     }
    8.     $index = 0;
    9.     $arr = array('1','2','3','4','5','6','7','8','9','0','11','12');
    10.     if ($arr[$index] == $number) return $arr[$index];
    11.     $pass = "";
    12.     while($arr[$index] != $number) {
    13.         $index = rand(0, count($arr) - 1);
    14.         $pass .= " ".$arr[$index];
    15.      
    16.     return $pass;
    17. }
    Ну так у меня и так есть число которое введет юзер я не знаю как их по 6штук выводить
    --- Добавлено ---
    а такое подскажешь как сделать $arr=array('1','2','3','4','5','6','7','8','9','0','11','12'); такой $arr=array('123456','223456','323456','423456','523456','623456','723456','823456','923456','023456','1123456','1223456'............'121212121212'); ?
     
  12. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. $mchislo = rand(1, 999999);// эмулируем ввод пользователя
    2. echo "Число пользователя {$mchislo} <br>";
    3. echo  generate_password( $mchislo );
    4.  
    5. function generate_password( $number = 0 )
    6. {
    7.  
    8.     if ($number === 0) {
    9.         echo "Вы не указали значение";
    10.         return false;
    11.     }
    12.  
    13.     $result = [];
    14.  
    15.     $strlen = strlen( $number );  //сколько символов ввел пользователь
    16.     $count = rand(10, 20); // длинна массива
    17.     $array = [];
    18.     $array[] = $number;
    19.     for ($i = 0; $i <= $count; $i++) {
    20.         $array[] = rand( 1 . str_repeat("0", $strlen - 1), str_repeat("9", $strlen) ); //случайный набор чисел, как у пользователя
    21.     }
    22.     shuffle($array); //перемешаем массив
    23.  
    24.     $result = r( $array, $number, [] );
    25.  
    26.     return implode(" ", $result);
    27. }
    28.  
    29. function r( $array, $number, $result )
    30. {
    31.     $rand  = rand(0, count( $array ) - 1);
    32.  
    33.     $result[] = $array[ $rand ];
    34.  
    35.     if($array[ $rand ] !== $number)
    36.     {
    37.         $result = r( $array, $number, $result );
    38.     }
    39.  
    40.     return $result;
    41. }
    --- Добавлено ---
    Все что я написал вы должны были продумать в голове, или на бумаге. Как минимум продумать сколько может быть в массиве ключей, и что там должно быть обязательно то число которое ввел пользователь.
     
    Владимир11 нравится это.
  13. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    Спасибо большое
     
  14. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Научитесь продумывать свою идею до конца, на бумаге. За вас вечно писать не будут, если только у вас есть деньги :D
     
  15. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Лучше так написать, без второй функции
    PHP:
    1. $mchislo = rand(1, 999999);
    2. echo "Число пользователя {$mchislo} <br>";
    3. echo  generate_password( $mchislo );
    4.  
    5. function generate_password( $number = 0 )
    6. {
    7.     if ($number === 0) {
    8.          return  "Вы не указали значение";
    9.     }
    10.  
    11.     $result = [];
    12.     $strlen = strlen( $number );
    13.     $array = [];
    14.     $array[] = $number;
    15.     for ($i = 0; $i <= rand(10, 20); $i++) {
    16.         $array[] = rand( 1 . str_repeat("0", $strlen - 1), str_repeat("9", $strlen) );
    17.     }
    18.  
    19.     $rand  = rand(0, count( $array ) - 1);
    20.  
    21.     while ($array[ $rand ] !== $number)
    22.     {
    23.         $result[] = $array[ $rand ];
    24.         $rand  = rand(0, count( $array ) - 1);
    25.     }
    26.  
    27.     $result[] = $array[ $rand ];
    28.  
    29.     return implode(" ", $result);
    30. }