|
|
|
| Уважаемые участиник, помогите а? я уже видимо не соображаю, вроде все просто, но ..
вот код:
<?php
function srav ($index3, $index31)
{
if ($index31 == $index3)
{
$index31 = rand(0, count($arr3) - 1);
} else {
} return $index31;
}
// Массив с названиями файлов
$arr3 = array("http://site.ru/rand/1/ivan1.dat",
"http://site.ru/rand/1/ivan2.dat",
"http://site.ru/rand/1/ivan3.dat",
"http://site.ru/rand/1/ivan4.dat",
"http://site.ru/rand/1/ivan5.dat",
"http://site.ru/rand/1/ivan6.dat",
"http://site.ru/rand/1/ivan7.dat",
"http://site.ru/rand/1/ivan8.dat");
// Формируем случайный индекс массива
$index3 = rand(0, count($arr3) - 1);
$index31 = rand(0, count($arr3) - 1);
srav ($index3, $index31);
$buffer3 = file_get_contents($arr3[$index3]);
$buffer31 = file_get_contents($arr3[$index31]);
echo $buffer3.$buffer31;
?>
|
суть:
есть массив, в нем куски текста
я получаю случайный номер элемента массива, потом получаю случайным образом второй номер массива, и пытаюсь сравнить эти два числа, если они оказываються равны (ну вырался 2 элемент, и во второй подборке тоже 2 элемент, а мне надо чтобы выводились разные), то я еще раз делаю выборку случайного элемента..
но у меня все равно иногда получается что выбираються два одинаковых элемента..
Как быть? где моя ошибка? | |
|
|
|
|
|
|
|
для: sway
(23.11.2010 в 08:28)
| | Ошибка в том, что вы генерируете повторное значение только один раз. А это не может гарантировать того, что полученное вновь значение будет отличатся от предыдущего.
Следовательно, очевидный выход - генерировать до тех пор, пока значения не будут различны:
<?php
$a = mt_rand(0, 7);
while (($b = mt_rand(0, 7)) == $a) {}
echo $a.' ≠ '.$b;
|
Правда, при таком подходе, при определенном стечении обстаятельств (вспышки на солнце, лунное затмение, ets) возможно попадание в бесконечный цикл.
Как этого избежать (если это принципиально), а также над другими решениями, предлагаю вам подумать самому. | |
|
|
|
|
|
|
|
для: Drago
(23.11.2010 в 10:11)
| | Достаточно выбрать два индекса.
Но один из восьми возможных, а другой - только из семи. | |
|
|
|
|
|
|
|
для: sway
(23.11.2010 в 08:28)
| | А просто перемешать массив и взять из него любые два элемента разве не проще? | |
|
|
|
|
|
|
|
для: sim5
(23.11.2010 в 18:04)
| | Если подскажите как, буду очень признателен | |
|
|
|
|
|
|
|
для: sway
(25.11.2010 в 10:43)
| | Мануал вам подскажет - shuffle(array), и выбирайте, например, два первых ключа. | |
|
|
|
|
|
|
|
для: sim5
(25.11.2010 в 11:00)
| | )) нда, ну все равно спасибо | |
|
|
|