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
Форумы портала PHP.SU :: Версия для печати :: Выполнить цикл
Форумы портала PHP.SU » » Вопросы новичков » Выполнить цикл

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

1. yogeswar - 04 Декабря, 2012 - 06:35:46 - перейти к сообщению
Вроде бы задача простая, но не могу ее реализовать.
Имеется массив $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>';
Т.е. на вид задача простая, но не получается ее выполнить
2. tato - 04 Декабря, 2012 - 06:47:35 - перейти к сообщению
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 );
3. yogeswar - 04 Декабря, 2012 - 06:52:26 - перейти к сообщению
Обалдеть tato. Спасибо! Прекрасно работает. Видно я еще мало читаю. Спасибо!
4. tato - 04 Декабря, 2012 - 06:54:19 - перейти к сообщению
Это рекурсивная функция, почитай. Очень полезная вещь.
5. yogeswar - 04 Декабря, 2012 - 06:56:10 - перейти к сообщению
Обязательно почитаю!
6. sKaa - 04 Декабря, 2012 - 06:59:30 - перейти к сообщению
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.  

(Добавление)
Блин.. Уже ответили пока я писал свою рекурсивную функцию ))
7. yogeswar - 04 Декабря, 2012 - 07:04:37 - перейти к сообщению
Спасибо sKaa!!!
8. tato - 04 Декабря, 2012 - 07:06:46 - перейти к сообщению
sKaa, хороший пример, и рекурсия и ананимка в одном.
9. sKaa - 04 Декабря, 2012 - 07:09:55 - перейти к сообщению

Спасибо друзья, я люблю похвалы)))
10. Мелкий - 04 Декабря, 2012 - 08:48:45 - перейти к сообщению
sKaa пишет:
пока я писал свою рекурсивную функцию ))

Почему рекурсивную? Ведь при попытке уйти в рекурсию свалимся с fatal error и неизвестной переменной $iterate. PHP5.4.5
11. sKaa - 04 Декабря, 2012 - 09:00:42 - перейти к сообщению
Мелкий, Вы несомненно правы! Прошу прощения, недоглядел.
Итак :
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() );
12. EuGen - 04 Декабря, 2012 - 09:09:57 - перейти к сообщению
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));

?

 

Powered by ExBB FM 1.0 RC1