[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с логикой. Массив и случайное число
m4a1fox
Доброго всем дня. Представим. Есть массив значений. Допустим

$array = array ('1', '3', '4', '5', '6', '7',);

как вывести случайное значение?

$t = rand (0, 10);
echo $t;

То есть что бы вывелось например - 2 или 8 или 9 или 10?



Спустя 6 минут, 41 секунда (13.06.2011 - 14:33) nugle написал(а):
$t = $array[rand(0, count($array))];
как то так вроде

Спустя 3 минуты, 42 секунды (13.06.2011 - 14:37) m4a1fox написал(а):
nugle
НЕ понимаю:(

Спустя 38 секунд (13.06.2011 - 14:37) neadekvat написал(а):
array_rand()
Сколько раз говорили - читайте списки существующих функций.

Спустя 1 минута, 27 секунд (13.06.2011 - 14:39) nugle написал(а):
neadekvat
вы с inpostом определитесь как нас учить, то вначале говорите по ирбису, теперь делайте не так как на ирбис)

Спустя 2 минуты, 45 секунд (13.06.2011 - 14:42) neadekvat написал(а):
Цитата (nugle @ 13.06.2011 - 15:39)
вы с inpostом определитесь как нас учить, то вначале говорите по ирбису, теперь делайте не так как на ирбис)

А головой подумать? Если есть готовая функция - зачем использовать ее ручную реализацию?
На Ирбисе есть примеры готовых решений для задач, которые часто спрашивают. Но я не сказал "бери и пользуйся", я никогда такого не говорил. Пример - он и есть пример. Нельзя выключать голову, никогда, тем более, когда берешь чужой код.

Спустя 4 минуты, 26 секунд (13.06.2011 - 14:46) m4a1fox написал(а):
neadekvat
Цитата
Нельзя выключать голову, никогда, тем более, когда берешь чужой код.

Это вы про что?

И к тому же. Мне не нужно вывести случайное значение из массива, мне нужно вывести значение, которого НЕТ в массиве!

Спустя 53 секунды (13.06.2011 - 14:47) neadekvat написал(а):
Цитата (m4a1fox @ 13.06.2011 - 15:46)
Это вы про что?

Про то, что нельзя тупо взять и скопировать чужой код. Надо понять в нем каждую строчку и переписать самому.

Спустя 6 минут, 53 секунды (13.06.2011 - 14:54) nugle написал(а):
neadekvat
я понимаю каждую строчку, если не понимаю, то начинаю по 10 раз ее перечитывать чтобы понять, но не переписываю сам(
m4a1fox, запускай ранд и потом сравнивай с элементами в массиве, если они не схожи то пиши ее

Спустя 1 минута, 12 секунд (13.06.2011 - 14:55) m4a1fox написал(а):
neadekvat
Цитата
Надо понять в нем каждую строчку и переписать самому.

Хорошо! Тогда поясните -

$array = array ('1', '2', '3',)
$t = $array[rand(случайное)(0(от нуля), count($array)(до 3))];
echo $t;


Как это поможет вытащить цифру которой нет в массиве?

Спустя 13 минут, 56 секунд (13.06.2011 - 15:09) neadekvat написал(а):
Цитата (m4a1fox @ 13.06.2011 - 15:55)
Как это поможет вытащить цифру которой нет в массиве?

Никак, это функция поможет вытащить число, которое есть в массиве.
Если тебе нужно число, которого там нет, то нужно составить массив этих чисел, которых нет в первом массиве.

Спустя 3 минуты (13.06.2011 - 15:12) m4a1fox написал(а):
neadekvat
Вот и я об этом....

И как
Цитата
которых нет в первом массиве

Спустя 4 минуты, 49 секунд (13.06.2011 - 15:17) neadekvat написал(а):
$arr = array(1, 3, 4, 5, 7, 10); // Массив имеющихся чисел
$max = 11; // Максимальное значение

do
$num = rand(0, $max);
while (in_array($num, $arr));

echo $num;


Держи.

Спустя 1 минута, 54 секунды (13.06.2011 - 15:19) m4a1fox написал(а):
neadekvat
Ух-ты. do - while: давно не встречал такого.... с времен Попова))))

Спустя 1 минута, 52 секунды (13.06.2011 - 15:20) neadekvat написал(а):
Цитата (m4a1fox @ 13.06.2011 - 16:19)
Ух-ты. do - while: давно не встречал такого.... с времен Попова)

Ага, сказали, что это плохо - и все сразу забыли про эту конструкцию.

Спустя 1 минута, 18 секунд (13.06.2011 - 15:22) m4a1fox написал(а):
neadekvat
Та да! Спасибо! Ваша конструкция работает!

Спустя 1 минута, 36 секунд (13.06.2011 - 15:23) neadekvat написал(а):
Вот опять - сначала запустил, а потом подумал.
Это уже даже не смешно. Я только что говорил об этом.

Спустя 5 минут, 59 секунд (13.06.2011 - 15:29) m4a1fox написал(а):
neadekvat
Ну так я разобрал.... и все понял.

Спустя 1 час, 8 минут, 19 секунд (13.06.2011 - 16:38) Invis1ble написал(а):
Имхо, так получше будет:
$arr = array(1, 3, 5, 7, 9);
$arr_diff = array_diff(range(min($arr), max($arr)), $arr);

var_dump($arr_diff);

Спустя 6 минут, 28 секунд (13.06.2011 - 16:44) m4a1fox написал(а):
Invis1ble
Да, зачетно! Спасибо! Так гораздо лучше!

Спустя 4 минуты, 51 секунда (13.06.2011 - 16:49) m4a1fox написал(а):
Но тут же вопрос
А если мне необходимо вывести значения скажем между 1000 - 9999;
В первыцй массив у меня попадут значения из БД (как? еще сам не знаю).
То здесь ($arr_diff = array_diff(range(min($arr), max($arr)), $arr)wink.gif как мне указать число?

Спустя 2 минуты, 53 секунды (13.06.2011 - 16:52) Invis1ble написал(а):
m4a1fox
какое число?

Спустя 4 минуты, 17 секунд (13.06.2011 - 16:56) m4a1fox написал(а):
Invis1ble
9999? Понимаете, необходимо что бы программа выводила 4-х значное число (т.е. от 1000 - до 9999), но при этом, нужно что бы это число не совпадало уже с теми, что есть в БД...

Спустя 9 минут, 19 секунд (13.06.2011 - 17:05) Invis1ble написал(а):
Я то понимаю, но понимаешь ли ты смысл кода, который я написал и его отличие от того, что привел neadekvat?
Я поясню, но советую все же научиться анализировать, и если видишь незнакомую функцию - обратиться к мануалу и изучить ее работу.
Массив $arr - это исходные данные (которые у тебя в БД). Код формирует массив, содержащий значения начиная от минимального (из массива $arr) и до максимального (тоже из $arr) с шагом 1. Далее вычисляется разница между исходным и сформированным массивом, на выходе - значения, не входящие в исходный массив.
Если нужно задать какое-то другое минимальное и/или максимальное значение - в чем проблема?
$min = -10;
$max = 150;
$arr_diff = array_diff(range($min, $max), $arr);

Смысл кода не в этом, а в функциях range() и array_diff().

Спустя 6 минут, 15 секунд (13.06.2011 - 17:12) m4a1fox написал(а):
Invis1ble
Мдя... так я вроде и читал про эту функцию.... но теперь понял точно. Спасибо еще раз!

Спустя 4 минуты, 39 секунд (13.06.2011 - 17:16) SergeyZuzic написал(а):
m4a1fox
Случеам не
auto_increment
изобретаем?

Спустя 4 минуты, 34 секунды (13.06.2011 - 17:21) m4a1fox написал(а):
SergeyZuzic
Нет нет! Не auto_increment:)

Спустя 1 минута, 38 секунд (13.06.2011 - 17:23) Invis1ble написал(а):
Я по-ходу понял smile.gif Это я наверное туплю после суток кодинга biggrin.gif
Тебе нужно всего одно число? Или все числа, не входящие в исходный массив?
Если одно - то конечно же просто rand(), если все - то мой вариант.

Спустя 5 минут, 7 секунд (13.06.2011 - 17:28) m4a1fox написал(а):
Invis1ble
Вообщето одно, но если взять ваш вариант в снести его в список! То в общем-то не плохо получается. Жаль только не понимаю как вообще возможно применить shufle ко всему этому. То есть что бы выводилось допустим случайное число?!
вот собственно код

$arr = array(1000, 1011, 1022, 1033, 1044, 1055);
$min = 1000;
$max = 1100;

$arr_diff = array_diff(range($min, $max), $arr);

echo '<select>';
foreach ($arr_diff as $key => $value)
{
echo '<option name="'.$value.'">'.$value.'</option>';
}
echo '</select>';

Спустя 4 минуты, 25 секунд (13.06.2011 - 17:32) Invis1ble написал(а):
$arr = array(1000, 1011, 1022, 1033, 1044, 1055);
$min = 1000;
$max = 1100;

$arr_diff = array_diff(range($min, $max), $arr);
shuffle($arr_diff);

echo '<select>';
foreach ($arr_diff as $key => $value)
{
echo '<option name="'.$value.'">'.$value.'</option>';
}
echo '</select>';

Так?

Спустя 3 минуты, 32 секунды (13.06.2011 - 17:36) m4a1fox написал(а):
Invis1ble
Да, однозначно так. Спасибо. Выручили. Буду знать в дальнейшем!

Спустя 1 минута, 40 секунд (13.06.2011 - 17:37) Invis1ble написал(а):
Пожалуйста.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.