За последние 24 часа нас посетили 54347 программистов и 1776 роботов. Сейчас ищут 1009 программистов ...

Диапазон и запись в db

Тема в разделе "Прочие вопросы по PHP", создана пользователем 715kg, 27 фев 2015.

  1. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Здравствуйте. Помогите пожалуйста.

    Есть БД. В нее производится запись. Есть поле port имеет INT значение.

    Есть определенный диапазон чисел, которые должно принимать поле port

    Напримет 0-5, То есть числа от 0 - до 5

    В базе есть данные:
    Порт 0
    Порт 2
    Порт 3

    Как видим нету порта 1, 4, 5.

    Задача такая. Подскажите, как сделать проверку, что бы скрипт определил каких чисел в этом диапазоне нету и выбрал наименьшее число. Например он определил что нету 1,4,5 и выдал 1.

    Мне нужно при следующий записи вносить недостающие числа в поле port, А как проверку сделать, не знаю.
    Думаю понятно описал, заранее огромное спасибо!

    Добавлено спустя 22 минуты 23 секунды:
    Что то сделал. Но почему то не работает. По идеи должно. Может я что то пропустил?

    Код (Text):
    1.  
    2. $mas = array (1,5,0,3);
    3.  
    4. $standart = range(0,5);
    5. for ($i=0; $i<5; $i+) {
    6.     if (!in_array($standart[$i], $mas)) {
    7.         $res[] = $standart[$i];
    8.     }
    9. }
    10.  
    11. echo min($res);
    Должен вывести 2 по идеи
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    два он и выводит. ты чуть ошибся тут
    Код (Text):
    1. for ($i=0; $i<5; $i+)
    .
    и еще заметь, ты говорил чтобы в массиве у тебя было 5 значений, но у тебя в массиве 6 значений будет.
    Код (Text):
    1. $standart = range(0,5);
    в остальном код рабочий
     
  3. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Спасибо, исправил $i++ должно. Не заметил.

    Так и должно быть. Ведь база большая. Диапазон чисел от 0 до 5000 И в базе много значений. Какие то удаляются, какие то добавляются.
    Определяю все не достающие числа. print_r($res) выведет массив с недостающими числами. А мне нужно только одно, наименьшее, что бы когда добавлялась новая запись, в поле port присваивалось одно наименьшее недостающее значение.

    Числа в массива $mas = array (1,5,0,3); от 0 до 5. Поэтому $i=0; $i<5

    Тогда for ($i=0; $i<count($mas); $i++)

    ----------------------------
    Правильно?

    Код (Text):
    1. $mas = array (1,5,3,0);
    2.  
    3.  
    4. $standart = range(0,5);
    5. for ($i=1; $i<count($mas); $i++) {
    6.     if (!in_array($standart[$i], $mas)) {
    7.         $res[] = $standart[$i];
    8.     }
    9. }
    10.  
    11. echo min($res); //Наименьшее недостающие число.
    Вроде все работает без проблем.
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    да, лучше всегда использовать count()
     
  5. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Так и не понял в чем подвох в
    Код (Text):
    1. $standart = range(0,5);
    2.  
    3. print_r($res); //Выводи Array ( [0] => 2 )
    А вот

    Код (Text):
    1. $standart = range(1,5);
    2.  
    3. print_r($res); //Выводи Array ( [0] => 2 [1] => 4 )
    Если числа у меня от 0 начинаются, то мне все равно range оставить от 1 ?

    Добавлено спустя 8 минут 12 секунд:
    Учитывая что я использую теперь count($mas), это он мне что, выводит одно наименьшее не достающее ? То есть min() на выводе уже использовать не нужно?
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    когда ты задаешь длину массива 5 значений там у тебя будет 6
    потому что отсчет в массивах начинается с 0
    соответственно
    Код (Text):
    1.  
    2. //echo "<pre>";
    3. //var_dump($standart);
    4. array(6) {
    5.   [0]=>
    6.   int(0)
    7.   [1]=>
    8.   int(1)
    9.   [2]=>
    10.   int(2)
    11.   [3]=>
    12.   int(3)
    13.   [4]=>
    14.   int(4)
    15.   [5]=>
    16.   int(5)
    17. }
     
  7. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0

    Смотри -
    Код (Text):
    1. $mas = array (1,4,2,0);
    2.  
    3. //Диапазон чисел
    4. $min = 0;
    5. $max = 5;
    6.  
    7.  
    8. $standart = range($min,$max);
    9. for ($i=$min; $i<count($mas); $i++) {
    10.     if (!in_array($standart[$i], $mas)) {
    11.         $res[] = $standart[$i];
    12.     }
    13. }
    14.  
    15. print_r($res); //Выводи Array ( [0] => 3 )
    А где 5 еще ?
     
  8. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    так не длина $mas а длина $standart нужна
    Код (Text):
    1. for ($i = 0; $i < count($standart); $i++) {
     
  9. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Все заработало отлично. Спасибо большое!!!!!

    Добавлено спустя 20 минут:
    Еще проблема

    Код (Text):
    1. $mas = array (20002,20003); //Массив из базы
    2.  
    3. //Диапазон чисел
    4. $min = 20000;
    5. $max = 50000;
    6.  
    7. $standart = range($min,$max);
    8. for ($i = $min; $i<count($standart); $i++) {
    9.     if (!in_array($standart[$i], $mas)) {
    10.         $res[] = $standart[$i];
    11.     }
    12. }
    Диапазон от 20000 до 50000

    print_r($res); Выводит [0] => 40000 [1] => 40001 [2] => 40002 [3] => 40003 [4] => 40004 [5] => 40005 [6] => 40006

    Начинает выводит от 40000

    И минимальное недостающие число получается 40000
    Хотя должно быть Print_r($res) должен вывести [0] => 20000 [1] => 20001
     
  10. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    не надо присваивать $i значение $min.
    Вы наверно поняли в чем ваша ошибка?)
    вот вам кусок вардампа $standart;
    Код (Text):
    1. array(30001) {
    2.   [0]=>
    3.   int(20000)
    4.   [1]=>
    5.   int(20001)
    6.   [2]=>
    7.   int(20002)
    8.   [3]=>
    9.   int(20003)
    10.   [4]=>
    11.   int(20004)
    12.   [5]=>
    думаю догадаетесь
     
  11. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Да, теперь дошло до меня) $i это номер значения, с которого начинать вывод. Еще раз Спасибо