Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: функция сравнения
 
 автор: sway   (23.11.2010 в 08:28)   письмо автору
 
 

Уважаемые участиник, помогите а? я уже видимо не соображаю, вроде все просто, но ..
вот код:
<?php 
function srav ($index3$index31)
{
if (
$index31 == $index3)
{
$index31  rand(0count($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(0count($arr3) - 1);
  
$index31  rand(0count($arr3) - 1);
srav ($index3$index31);
  
$buffer3 file_get_contents($arr3[$index3]);
  
$buffer31 file_get_contents($arr3[$index31]);
echo 
$buffer3.$buffer31;
?>

суть:
есть массив, в нем куски текста
я получаю случайный номер элемента массива, потом получаю случайным образом второй номер массива, и пытаюсь сравнить эти два числа, если они оказываються равны (ну вырался 2 элемент, и во второй подборке тоже 2 элемент, а мне надо чтобы выводились разные), то я еще раз делаю выборку случайного элемента..
но у меня все равно иногда получается что выбираються два одинаковых элемента..
Как быть? где моя ошибка?

  Ответить  
 
 автор: Drago   (23.11.2010 в 10:11)   письмо автору
 
   для: sway   (23.11.2010 в 08:28)
 

Ошибка в том, что вы генерируете повторное значение только один раз. А это не может гарантировать того, что полученное вновь значение будет отличатся от предыдущего.

Следовательно, очевидный выход - генерировать до тех пор, пока значения не будут различны:
<?php
$a 
mt_rand(07);
while ((
$b mt_rand(07)) == $a) {}

echo 
$a.' &#8800; '.$b;


Правда, при таком подходе, при определенном стечении обстаятельств (вспышки на солнце, лунное затмение, ets) возможно попадание в бесконечный цикл.
Как этого избежать (если это принципиально), а также над другими решениями, предлагаю вам подумать самому.

  Ответить  
 
 автор: Trianon   (23.11.2010 в 19:02)   письмо автору
 
   для: Drago   (23.11.2010 в 10:11)
 

Достаточно выбрать два индекса.
Но один из восьми возможных, а другой - только из семи.

  Ответить  
 
 автор: sim5   (23.11.2010 в 18:04)   письмо автору
 
   для: sway   (23.11.2010 в 08:28)
 

А просто перемешать массив и взять из него любые два элемента разве не проще?

  Ответить  
 
 автор: sway   (25.11.2010 в 10:43)   письмо автору
 
   для: sim5   (23.11.2010 в 18:04)
 

Если подскажите как, буду очень признателен

  Ответить  
 
 автор: sim5   (25.11.2010 в 11:00)   письмо автору
 
   для: sway   (25.11.2010 в 10:43)
 

Мануал вам подскажет - shuffle(array), и выбирайте, например, два первых ключа.

  Ответить  
 
 автор: sway   (25.11.2010 в 11:09)   письмо автору
 
   для: sim5   (25.11.2010 в 11:00)
 

)) нда, ну все равно спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования