Здравствуйте. Помогите пожалуйста. Есть БД. В нее производится запись. Есть поле port имеет INT значение. Есть определенный диапазон чисел, которые должно принимать поле port Напримет 0-5, То есть числа от 0 - до 5 В базе есть данные: Порт 0 Порт 2 Порт 3 Как видим нету порта 1, 4, 5. Задача такая. Подскажите, как сделать проверку, что бы скрипт определил каких чисел в этом диапазоне нету и выбрал наименьшее число. Например он определил что нету 1,4,5 и выдал 1. Мне нужно при следующий записи вносить недостающие числа в поле port, А как проверку сделать, не знаю. Думаю понятно описал, заранее огромное спасибо! Добавлено спустя 22 минуты 23 секунды: Что то сделал. Но почему то не работает. По идеи должно. Может я что то пропустил? Код (Text): $mas = array (1,5,0,3); $standart = range(0,5); for ($i=0; $i<5; $i+) { if (!in_array($standart[$i], $mas)) { $res[] = $standart[$i]; } } echo min($res); Должен вывести 2 по идеи
два он и выводит. ты чуть ошибся тут Код (Text): for ($i=0; $i<5; $i+) . и еще заметь, ты говорил чтобы в массиве у тебя было 5 значений, но у тебя в массиве 6 значений будет. Код (Text): $standart = range(0,5); в остальном код рабочий
Спасибо, исправил $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): $mas = array (1,5,3,0); $standart = range(0,5); for ($i=1; $i<count($mas); $i++) { if (!in_array($standart[$i], $mas)) { $res[] = $standart[$i]; } } echo min($res); //Наименьшее недостающие число. Вроде все работает без проблем.
Так и не понял в чем подвох в Код (Text): $standart = range(0,5); print_r($res); //Выводи Array ( [0] => 2 ) А вот Код (Text): $standart = range(1,5); print_r($res); //Выводи Array ( [0] => 2 [1] => 4 ) Если числа у меня от 0 начинаются, то мне все равно range оставить от 1 ? Добавлено спустя 8 минут 12 секунд: Учитывая что я использую теперь count($mas), это он мне что, выводит одно наименьшее не достающее ? То есть min() на выводе уже использовать не нужно?
когда ты задаешь длину массива 5 значений там у тебя будет 6 потому что отсчет в массивах начинается с 0 соответственно Код (Text): //echo "<pre>"; //var_dump($standart); array(6) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) }
Смотри - Код (Text): $mas = array (1,4,2,0); //Диапазон чисел $min = 0; $max = 5; $standart = range($min,$max); for ($i=$min; $i<count($mas); $i++) { if (!in_array($standart[$i], $mas)) { $res[] = $standart[$i]; } } print_r($res); //Выводи Array ( [0] => 3 ) А где 5 еще ?
Все заработало отлично. Спасибо большое!!!!! Добавлено спустя 20 минут: Еще проблема Код (Text): $mas = array (20002,20003); //Массив из базы //Диапазон чисел $min = 20000; $max = 50000; $standart = range($min,$max); for ($i = $min; $i<count($standart); $i++) { if (!in_array($standart[$i], $mas)) { $res[] = $standart[$i]; } } Диапазон от 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
не надо присваивать $i значение $min. Вы наверно поняли в чем ваша ошибка?) вот вам кусок вардампа $standart; Код (Text): array(30001) { [0]=> int(20000) [1]=> int(20001) [2]=> int(20002) [3]=> int(20003) [4]=> int(20004) [5]=> думаю догадаетесь