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

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

1. Aximus - 19 Ноября, 2011 - 10:15:37 - перейти к сообщению
Доброго времени суток!

Есть код:


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

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

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

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

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

Помогите разобраться. Буду очень благодарен
2. De-Luxis - 19 Ноября, 2011 - 10:46:58 - перейти к сообщению
3. Aximus - 19 Ноября, 2011 - 11:28:36 - перейти к сообщению
А можно по подробнее?

пишу:


не получается того, что хочу.
4. tuareg - 19 Ноября, 2011 - 11:49:59 - перейти к сообщению
Вот здесь посмотрите
http://www.php.su/functions/?array_rand
5. dadli - 19 Ноября, 2011 - 11:51:12 - перейти к сообщению
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. }


ето хотели?
6. Panoptik - 19 Ноября, 2011 - 12:12:35 - перейти к сообщению
я подобные вещи с защитой от перезагрузки страницы делаю только через сессии, или например через файл/Бд. нужно полюбому гдето хранить текущее/прошлое состояние
с использование сессии будет выглядеть гдето так
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.  


писал сходу, так что за очепятки не ручаюсь. Но в таком раскладе при каждом обновлении будет меняться цвет на следующий
7. Aximus - 19 Ноября, 2011 - 12:24:11 - перейти к сообщению
благодарю за ответ. Но не выходит
Более подробно рассказываю
Я создаю модуль на форум(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

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

А вот эти два пункта. Чтоб все ники в теме одного цвета были либо каждый ник в посте по разному цвету не выходит (
8. Panoptik - 19 Ноября, 2011 - 12:27:23 - перейти к сообщению
стоп, чтото я не понял. вам нужно при загрузке страницы выдавать ВСЕМ пользователям один цвет, но каждый раз, когда страница будет перезагружаться этот цвет будет разным? или каждому пользователю разный цвет при каждой загрузке страницы?
(Добавление)
и еще если всё таки надумали использовать сессии - убедитесь что до действий с с сессиями у вас нет вывода на страницу. ни одного echo, print или просто html-кода. иначе сессия не будет работать
9. Aximus - 19 Ноября, 2011 - 12:38:34 - перейти к сообщению
Panoptik пишет:
стоп, чтото я не понял. вам нужно при загрузке страницы выдавать ВСЕМ пользователям один цвет, но каждый раз, когда страница будет перезагружаться этот цвет будет разным? или каждому пользователю разный цвет при каждой загрузке страницы?

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

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

Мне надо чтоб рандом генерировал 1 раз до следующего обращения. Я не пойму как это сделать.
10. Panoptik - 19 Ноября, 2011 - 12:50:52 - перейти к сообщению
то ли я дурак, то ли лыжи не едут...

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


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

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

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

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

Попытайтесь изложить суть вопроса поконкретнее... не я это сказал, но повторюсь "в хорошо заданном вопросе уже имеется половина ответа"
11. Aximus - 19 Ноября, 2011 - 12:56:49 - перейти к сообщению
Есть пользователь ivanov, есть тема, в которой он отписался 4 раза.
Есть массив цветов(красный, синий, желтый, оранжевый)

Задача:
1. При загрузке темы. У пользователя ivanov был цвет красный в 4- сообщениях, при обновление синий и т.д. Т.е мне нужно в рандоме сделать так. чтоб он один раз генерировал цвет из массива
2. При загрузке темы. У пользователя ivanov в 4-х разных сообщений в теме, было 4 разных цвета
12. Panoptik - 19 Ноября, 2011 - 13:15:03 - перейти к сообщению
если хотите именно уникальные цвета, то нужно перебирать массив с учетом этого, ибо рандом может вернуть вам один и тот же цвет, тем более что в массиве как я понимаю набор цветов не очень велик

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.  


вот как то так. в данном случае у всех пользователей будут разные цвета, если конечно число пользователей не будет больше чем число разных цветов
13. Aximus - 24 Ноября, 2011 - 21:53:34 - перейти к сообщению
Как-то сильно замудренно получается....

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

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

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

 

Powered by ExBB FM 1.0 RC1