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 :: mt_rand and count()

 PHP.SU

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


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

> Без описания
Aximus
Отправлено: 19 Ноября, 2011 - 10:15:37
Post Id


Новичок


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


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




Доброго времени суток!

Есть код:


$colors - это массив где перечислены цвета через запятую.

Я не могу догнать....

1. Как сделать так, чтоб генерировался всего раз до след обновления т.е загрузил выпал красный цвет обновил выпал синий
2. Чтоб выводил каждый раз все цвета по циклу.. пробовал ставить +1 не получается

либо global $var_name использовать....

Вообщем вроде все на поверхности, а запутался в конец...

Помогите разобраться. Буду очень благодарен
 
 Top
De-Luxis
Отправлено: 19 Ноября, 2011 - 10:46:58
Post Id



Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Янв. 2009  


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




 
 Top
Aximus
Отправлено: 19 Ноября, 2011 - 11:28:36
Post Id


Новичок


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


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




А можно по подробнее?

пишу:


не получается того, что хочу.

(Отредактировано автором: 19 Ноября, 2011 - 11:31:05)

 
 Top
tuareg
Отправлено: 19 Ноября, 2011 - 11:49:59
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


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




Вот здесь посмотрите
http://www.php.su/functions/?array_rand
 
 Top
dadli
Отправлено: 19 Ноября, 2011 - 11:51:12
Post Id



Посетитель


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


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




Aximus



Цитата:
1. Как сделать так, чтоб генерировался всего раз до след обновления т.е загрузил выпал красный цвет обновил выпал синий


PHP:
скопировать код в буфер обмена
  1. $mas = array("belii","sinii","krasni");
  2. $key = array_rand($mas);
  3. echo $mas[$key];

но сушествует вераятност что цвети иногда повторялис


Цитата:
2. Чтоб выводил каждый раз все цвета по циклу.. пробовал ставить +1 не получается

PHP:
скопировать код в буфер обмена
  1. foreach ($mas as $val) {
  2.         echo $val."<br>";
  3. }


ето хотели?
 
 Top
Panoptik
Отправлено: 19 Ноября, 2011 - 12:12:35
Post Id



Постоянный участник


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


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




я подобные вещи с защитой от перезагрузки страницы делаю только через сессии, или например через файл/Бд. нужно полюбому гдето хранить текущее/прошлое состояние
с использование сессии будет выглядеть гдето так
PHP:
скопировать код в буфер обмена
  1.  
  2. $colors = array(
  3. 0 => 'blue',
  4. 1 => 'white',
  5. 2 => 'red',
  6. 3 => 'green',
  7. );
  8.  
  9.  
  10. if($_SESSION['count'] > count($colors)) {
  11.     $_SESSION['count'] = 0;
  12. } else {
  13.     $_SESSION['count']++;
  14. }
  15.  
  16. $count = $_SESSION['count'];
  17.  
  18. echo $colors[$count];
  19.  


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


-----
Just do it
 
 Top
Aximus
Отправлено: 19 Ноября, 2011 - 12:24:11
Post Id


Новичок


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


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




благодарю за ответ. Но не выходит
Более подробно рассказываю
Я создаю модуль на форум(vBulletin), чтобы цвет ника менял на мои настройки:

код:
PHP:
скопировать код в буфер обмена
  1.    if (!(empty($this->registry->options['usercolors_global'])))
  2.        {
  3.         $usercolors = explode(',', $this->registry->options['usercolors_global']);
  4.        }


пишу код, который указывали вы:
PHP:
скопировать код в буфер обмена
  1.    if ($this->registry->options['usercolors_rand'])
  2.        {
  3.          $key = array_rand($usercolors);
  4.  
  5.          $post[musername] = '<font color="'.$usercolors[$grkey].'">'.$usercolorfrm.'</font>';
  6.        } else
  7.        {
  8.    код
  9.        }


$usercolors не указываю в последнем т.е это и так массив

получаю:

http://s017[dot]radikal[dot]ru/i435/1111[dot][dot][dot]8bf6893ed2d9[dot]jpg

все что хотел, реализовал.

А вот эти два пункта. Чтоб все ники в теме одного цвета были либо каждый ник в посте по разному цвету не выходит (
 
 Top
Panoptik
Отправлено: 19 Ноября, 2011 - 12:27:23
Post Id



Постоянный участник


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


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




стоп, чтото я не понял. вам нужно при загрузке страницы выдавать ВСЕМ пользователям один цвет, но каждый раз, когда страница будет перезагружаться этот цвет будет разным? или каждому пользователю разный цвет при каждой загрузке страницы?
(Добавление)
и еще если всё таки надумали использовать сессии - убедитесь что до действий с с сессиями у вас нет вывода на страницу. ни одного echo, print или просто html-кода. иначе сессия не будет работать


-----
Just do it
 
 Top
Aximus
Отправлено: 19 Ноября, 2011 - 12:38:34
Post Id


Новичок


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


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




Panoptik пишет:
стоп, чтото я не понял. вам нужно при загрузке страницы выдавать ВСЕМ пользователям один цвет, но каждый раз, когда страница будет перезагружаться этот цвет будет разным? или каждому пользователю разный цвет при каждой загрузке страницы?

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

Например:
Имеется: тема , пользователь который написал 4 сообщения. Есть массив, где указано тоже допустим 4 цвета. И при каждой загрузке страницы. У пользователя в 4- сообщений менялся цвет из массива.

Мне надо чтоб рандом генерировал 1 раз до следующего обращения. Я не пойму как это сделать.

(Отредактировано автором: 19 Ноября, 2011 - 12:51:19)

 
 Top
Panoptik
Отправлено: 19 Ноября, 2011 - 12:50:52
Post Id



Постоянный участник


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


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




то ли я дурак, то ли лыжи не едут...

Цитата:
Например:
Имеется: тема , пользователь который написал 4 сообщения. Есть массив, где указано тоже допустим 4 цвета. И при каждой загрузке страницы. У пользователя в 4- сообщений менялся цвет из массива.


на сколько я понял допустим есть юзер's: ivanov[4 сообщения],petrov[2 сообщения]

загружаем тему форума. и тут высвечиваются все сообщения вышеупомянутых пользователей.

итак: в чем задача?
вариант 1: мы КАЖДОМУ пользователю присваиваем свой отдельный цвет (например ivanov случайным(или преднамеренно) образом получает цвет "синий", а petrov по такому же принципу - "зеленый") и соответственно все посты одного пользователя имеют соответствующий ему цвет

вариант 2: мы после каждой загрузки страницы назначаем ВСЕМ пользователям (отдельные? или одниковые? цвета ников)

Попытайтесь изложить суть вопроса поконкретнее... не я это сказал, но повторюсь "в хорошо заданном вопросе уже имеется половина ответа"


-----
Just do it
 
 Top
Aximus
Отправлено: 19 Ноября, 2011 - 12:56:49
Post Id


Новичок


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


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




Есть пользователь ivanov, есть тема, в которой он отписался 4 раза.
Есть массив цветов(красный, синий, желтый, оранжевый)

Задача:
1. При загрузке темы. У пользователя ivanov был цвет красный в 4- сообщениях, при обновление синий и т.д. Т.е мне нужно в рандоме сделать так. чтоб он один раз генерировал цвет из массива
2. При загрузке темы. У пользователя ivanov в 4-х разных сообщений в теме, было 4 разных цвета

(Отредактировано автором: 19 Ноября, 2011 - 12:58:59)

 
 Top
Panoptik
Отправлено: 19 Ноября, 2011 - 13:15:03
Post Id



Постоянный участник


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


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




если хотите именно уникальные цвета, то нужно перебирать массив с учетом этого, ибо рандом может вернуть вам один и тот же цвет, тем более что в массиве как я понимаю набор цветов не очень велик

PHP:
скопировать код в буфер обмена
  1.  
  2. if ($this->registry->options['usercolors_rand'])
  3.        {
  4.          $key = array_rand($usercolors);
  5.  
  6.          $post[musername] = '<font color="'.$usercolors[$grkey].'">'.$usercolorfrm.'</font>';
  7.        } else
  8.        {
  9.    код
  10.        }
  11.  


почему у вас в переменную $key попадает ключ сгенерированный случайно, а в массив вы подставляете переменную $grkey?

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

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $colors = array(
  4. 0 => 'blue',
  5. 1 => 'white',
  6. 2 => 'red',
  7. 3 => 'green',
  8. );
  9.  
  10. $users = array(
  11. 'ivanov' => 4,
  12. 'petrov' => 14,
  13. 'sidorov' => 8,
  14. );
  15.  
  16.  
  17. if($_SESSION['count'] >= (count($colors)-1)) {
  18.     $_SESSION['count'] = 0;
  19. } else {
  20.     $_SESSION['count']++;
  21. }
  22.  
  23. $count = $_SESSION['count'];
  24.  
  25. $color = $colors[$count];
  26.  
  27. echo $color;
  28. ?>
  29.  


это мы берем произвольный цвет. если нужно каждому пользователю назначить свой цвет можно создать массив в котором будет соотношение пользователь/цвет

PHP:
скопировать код в буфер обмена
  1.  
  2. $k = $count;
  3. foreach($users as $user) {
  4. //в данном случае я абстрактно держу всех пользователей в массиве $users
  5. //допустим $user - это уникальный id
  6.     if(($k) >= (count($colors))) {
  7.         $k = 0;
  8.     }
  9.     $usercolors[$user] = $colors[$k++];
  10. }
  11.  
  12. // ... произвольный код
  13. //после всего во время вывода пользователей выводим
  14.  
  15.  if ($this->registry->options['usercolors_rand'])
  16.        {
  17.  
  18.          $post[musername] = '<font color="'.$usercolors[$userid].'">'.$usercolorfrm.'</font>';
  19.        } else
  20.        {
  21.    код
  22.        }
  23.  
  24.  


вот как то так. в данном случае у всех пользователей будут разные цвета, если конечно число пользователей не будет больше чем число разных цветов

(Отредактировано автором: 19 Ноября, 2011 - 13:26:45)



-----
Just do it
 
 Top
Aximus
Отправлено: 24 Ноября, 2011 - 21:53:34
Post Id


Новичок


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


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




Как-то сильно замудренно получается....

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

Если я ввожу любую переменную и заданию значение цвета допустим - красного. То при выводите этой переменной будет строго один цвет красный.

а как сделать такое же, но с массивом?

(Отредактировано автором: 24 Ноября, 2011 - 21:57:43)

 
 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