Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Выполнить цикл

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Не могу выполнить цикл
yogeswar
Отправлено: 04 Декабря, 2012 - 06:35:46
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Сент. 2012  
Откуда: Екатеринбург


Помог: 0 раз(а)




Вроде бы задача простая, но не могу ее реализовать.
Имеется массив $slu = array(0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, 5 => 6);
Я с помощью функции случайных чисел mt_rand() подбираю такое, которое не равно ни одному элементу массива. Числа я подбираю в промежутке от 0 до 9.

Казалось бы просто с помощью функции
$chislo = mt_rand(1, 9);
podbor();
function podbor() {
global $slu;
global $chislo;
for ($i = 0; $i<count($slu)+1; $i++){
if($chislo == $slu[$i]){
$chislo = mt_rand(1, 9); echo $chislo.'<br>'; podbor();}
else {continue;}
}
}
echo $chislo.'<br>';
Но в результате бесконечный цикл.
Или
for ($i = 0; $i<count($slu)+1; $i++){
do {
$chislo = mt_rand(1, 9);
}
while ($chislo != $slu[$i]);
}
echo $chislo.'<br>';
Т.е. на вид задача простая, но не получается ее выполнить
 
 Top
tato
Отправлено: 04 Декабря, 2012 - 06:47:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




PHP:
скопировать код в буфер обмена
  1. function diff_val( $exclude )
  2. {
  3.     $rnd = mt_rand( 1, 9 );
  4.    
  5.     if( in_array( $rnd, $exclude ) )
  6.     {
  7.         return diff_val( $exclude );
  8.     }
  9.    
  10.     return $rnd;
  11. }
  12.  
  13.  
  14.  
  15. $arr = array( 1, 2, 3, 4, 5, 6 );
  16.  
  17. echo diff_val( $arr );

(Отредактировано автором: 04 Декабря, 2012 - 06:48:13)



-----
просто ?: сложно
 
 Top
yogeswar
Отправлено: 04 Декабря, 2012 - 06:52:26
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Сент. 2012  
Откуда: Екатеринбург


Помог: 0 раз(а)




Обалдеть tato. Спасибо! Прекрасно работает. Видно я еще мало читаю. Спасибо!
 
 Top
tato
Отправлено: 04 Декабря, 2012 - 06:54:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




Это рекурсивная функция, почитай. Очень полезная вещь.


-----
просто ?: сложно
 
 Top
yogeswar
Отправлено: 04 Декабря, 2012 - 06:56:10
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Сент. 2012  
Откуда: Екатеринбург


Помог: 0 раз(а)




Обязательно почитаю!
 
 Top
sKaa
Отправлено: 04 Декабря, 2012 - 06:59:30
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


PHP:
скопировать код в буфер обмена
  1. if (version_compare(PHP_VERSION, '5.4.3', '<'))
  2. {
  3.         die('Your host needs to use PHP 5.4.3 or higher to run this script!');
  4. }
  5.  
  6. // ----
  7. $array = array(1,2,3,4,5,6,7,8,9);
  8. $number = mt_rand(1, count($array));
  9.  
  10. $iterate = function() use ($array, $number){
  11.         for($k=0;$k<=count($array);$k++){
  12.                 if($array[$k] == $number){
  13.                         return $number;
  14.                 }else{
  15.                         if($k==count($array)){
  16.                                 return $iterate();     
  17.                         }
  18.                 }
  19.         }
  20. };
  21.  
  22. echo $iterate();
  23.  
  24. //var_dump($iterate()); // 7
  25. //var_dump($iterate()); // 3
  26. //var_dump($iterate()); // 1
  27.  

(Добавление)
Блин.. Уже ответили пока я писал свою рекурсивную функцию ))
 
 Top
yogeswar
Отправлено: 04 Декабря, 2012 - 07:04:37
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Сент. 2012  
Откуда: Екатеринбург


Помог: 0 раз(а)




Спасибо sKaa!!!
 
 Top
tato
Отправлено: 04 Декабря, 2012 - 07:06:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




sKaa, хороший пример, и рекурсия и ананимка в одном.


-----
просто ?: сложно
 
 Top
sKaa
Отправлено: 04 Декабря, 2012 - 07:09:55
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]



Спасибо друзья, я люблю похвалы)))
 
 Top
Мелкий Супермодератор
Отправлено: 04 Декабря, 2012 - 08:48:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




sKaa пишет:
пока я писал свою рекурсивную функцию ))

Почему рекурсивную? Ведь при попытке уйти в рекурсию свалимся с fatal error и неизвестной переменной $iterate. PHP5.4.5


-----
PostgreSQL DBA
 
 Top
sKaa
Отправлено: 04 Декабря, 2012 - 09:00:42
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Мелкий, Вы несомненно правы! Прошу прощения, недоглядел.
Итак :
PHP:
скопировать код в буфер обмена
  1. if (version_compare(PHP_VERSION, '5.4.3', '<'))
  2. {
  3.         die('Your host needs to use PHP 5.4.3 or higher to run this script!');
  4. }
  5.  
  6. // ----
  7. $array = array(1,2,3,4,5,6,7,8,9);
  8. $number = mt_rand(1, count($array));
  9.  
  10. $iterate = function() use ($array, $number){
  11.         for($k=0;$k<=count($array);$k++)
  12.                 if($array[$k] == $number)
  13.                         return $number;
  14.         return FALSE;
  15. };
  16.  
  17. var_dump( $iterate() );

(Отредактировано автором: 04 Декабря, 2012 - 09:01:10)

 
 Top
EuGen Администратор
Отправлено: 04 Декабря, 2012 - 09:09:57
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




yogeswar пишет:
Я с помощью функции случайных чисел mt_rand() подбираю такое, которое не равно ни одному элементу массива. Числа я подбираю в промежутке от 0 до 9.

PHP:
скопировать код в буфер обмена
  1. $rgData = array(1,3,4,5,7,8,9);
  2. $iResult= array_rand(array_diff(range(0,9),$rgData));

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB