За последние 24 часа нас посетили 17864 программиста и 1611 роботов. Сейчас ищут 1416 программистов ...

Алгоритм распознавания введенных номеров

Тема в разделе "Решения, алгоритмы", создана пользователем BeInspired, 3 авг 2008.

  1. BeInspired

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

    С нами с:
    11 сен 2007
    Сообщения:
    45
    Симпатии:
    0
    Друзья, помогите с алгоритмом - что-то ничего в голову не приходит. Задача в том, чтобы распознать введенные пользователем номера страниц (как при печати в ворде вводишь номера либо через запятую, либо через тире задаешь диапазон) и положить это в массив: т.е. если пользователь ввел "1,5,6-10,19" в массиве должно получиться 1,5,6,7,8,9,10 и 19...
     
  2. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    BeInspired
    Тебе нужен не массив, а функция, которая по номеру и по маске-диапазону определяет, входит ли номер в маску.
    Представь, что будет, если пользователь введет "1-100000000".
     
  3. BeInspired

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

    С нами с:
    11 сен 2007
    Сообщения:
    45
    Симпатии:
    0
    Есть предел введенному значению: 2000
     
  4. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    BeInspired
    PHP:
    1. <?php
    2.  
    3. $text="1,5,6-10,19";
    4. preg_match_all("{(\d+)-?(\d*)}",$text,$matches,PREG_SET_ORDER);
    5. $result=array();
    6. foreach($matches as $match) {
    7.   $min=min((int)$match[1],2000);
    8.   $max=min(max((int)$match[2],$min),2000);
    9.   $result=array_merge($result,range($min,$max));
    10. }
    11. sort($result); // array(1,5,6,7,8,9,10,19)
     
  5. BeInspired

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

    С нами с:
    11 сен 2007
    Сообщения:
    45
    Симпатии:
    0
    Премного обязан ))