Проблема с условиями
1.
Дмитрий (08.08.2010 / 17:40)
Драсть, помогите мне с условиями блин уже башка кипит, туплю, кароче есть у юзверей авторитет,
$avtoritet - это плюсы
$avtoritet1 - это минусы
Моя цель сделать статусы авторитета, в зависимости от количества плюсов и минусов. Составляю маленький велосипед из условий if-else, проблема в том, что одни плюсы или одни минусы выводит нормально, если у юзера есть и плюсы и минусы - выводит не корректно. Делаю так:
<?
if ($ak >= 0 and $ak < +5) {
$avtr = 'Зеленый';
}
if ($ak >= +6 and $ak < +10) {
$avtr = 'Чайник';
}
if ($ak >= +11 and $ak < +15) {
$avtr = 'Наш чел';
}
if ($ak >= +16 and $ak < +20) {
$avtr = 'Уважаемый';
}
if ($ak >= +21 and $ak < +30) {
$avtr = 'Почётный';
}
if ($ak >= +31 and $ak < +50) {
$avtr = 'Вышибало';
}
if ($ak >= -1 and $ak < -5) {
$avtr = 'Салага';
}
if ($ak >= -6 and $ak < -10) {
$avtr = 'Барыжко';
}
if ($ak >= -11 and $ak < -15) {
$avtr = 'Кидалко';
}
# тут записано еще так $ak = $avtoritet - $avtoritet1;
/*
ну а здесь уже вывод типа
intval($ak) это общее число
(+'.$avtoritet.'/-'.$avtoritet1.') это плюсы и минусы
ну и $avtr статус
2.
Дмитрий (08.08.2010 / 17:44)
Уже блин все перепробовал, и с else и с or всместо and .... и без + и -, один хрен не пашет. Выводит либо не правильный пункт либо вообще нифига. например у юзверя +12/-18 это будет -6, соответственно должно вывести "Барыжко" но его не выводит
3.
Антон (08.08.2010 / 18:02)
имспользуй int вместо intval, or не ставь здесь чёткий диапазон
4.
Антон (08.08.2010 / 18:03)
и плюсы рядом с числами убери!!!
5.
Антон (08.08.2010 / 18:05)
сорри за оффтоп, впервые пишешь?
6.
Дмитрий (08.08.2010 / 18:08)
та не, слава богу не впервые
так а какая разница, это ж пользовательская функция intval() и (int) без разници
7.
Антон (08.08.2010 / 18:13)
читай пост 4
8.
Дмитрий (08.08.2010 / 18:18)
Прочитал, убрал, все-равно пля не пашет, ставлю се авторитет +5 -10 итого -5 выходит, вот этот чудо
if ($ak >= 0 and $ak < 5) {
$avtr = 'Зеленый';
}
if ($ak >= 6 and $ak < 10) {
$avtr = 'Чайник';
}
if ($ak >= 11 and $ak < 15) {
$avtr = 'Наш чел';
}
if ($ak >= 16 and $ak < 20) {
$avtr = 'Уважаемый';
}
if ($ak >= 21 and $ak < 30) {
$avtr = 'Почётный';
}
if ($ak >= 31 and $ak < 50) {
$avtr = 'Вышибало';
}
if ($ak >= -1 and $ak < -5) {
$avtr = 'Салага';
}
if ($ak >= -6 and $ak < -10) {
$avtr = 'Барыжко';
}
if ($ak >= -11 and $ak < -15) {
$avtr = 'Кидалко';
}
если стоит перед $ak = $avtoritet - $avtoritet1 то выводит напостой первый пункт, если после, то нифига не выводит
9.
Антон (08.08.2010 / 18:31)
авторитет тоже без плюса ставь
10.
KOZZ (08.08.2010 / 18:34)
зачем тебе intval/int там вообще? там в любом случае будет целое число.
11.
Дмитрий (08.08.2010 / 18:39)
9 непонял, я ж поубирал плюсы, 10. ага я уже заметил но это неважно, не работает мое изобретение что делать
12.
KOZZ (08.08.2010 / 18:49)
11, щас напишу тебе свою версию
13.
Дмитрий (08.08.2010 / 18:54)
давай
14.
KOZZ (08.08.2010 / 19:15)
<?php
$plus = 16; # плюсы
$minus = 1; # минусы
$avt = $plus-$minus; # авторитет
$avt_name = array('Кидалко' => '-15|-11','Барыжко' => '-10|-6','Салага' => '-5|-1','Зеленый' => '0|5','Чайник' => '6|10','Наш чел' => '11|15','Уважаемый' => '16|20','Почётный' => '21|30','Вышибало' => '31|50');
foreach($avt_name as $name =>$num){
list($min,$max) = explode('|',$num);
$nums_range = range($min,$max);
# echo $name.' от '.$min.' до '.$max.'<br/>';
if(!in_array($avt,$nums_range)){continue;}else{$status = $name;}
}
echo 'Статус: '.$status.'<br/>'.'Авторитет: '.$avt.'( + '.$plus.' | '.$minus.' - )';
?>
вот как то так )
код рабочий,проверял.
удобно под админку адаптировать
15.
Антон (08.08.2010 / 19:18)
16.
Дмитрий (08.08.2010 / 19:22)
Да, работает, но я не пойму твой массив. как ты в нем адаптивовал эти статусы
17.
Дмитрий (08.08.2010 / 19:26)
Ага все разобрался, спс от души
18.
KOZZ (08.08.2010 / 19:30)
16, всм? это ассоциативный массив, ключом является название статуса, значением - строка вида "от|до".
дальше эта строка разделяется в переменные $min|$max, и создается массив допустимых чисел авторитета(о_О) для каждого статуса.
-------------
дальше если авторитет НЕ в массиве допустимых цифр статуса - проверяется следующий,и так пока не найдется соответствующее значение))
19.
KOZZ (08.08.2010 / 19:30)
17, не за что )
20.
KOZZ (08.08.2010 / 19:35)
кстати: лучше не использовать эту функцию для больших цифр, т.к. в каждой итерации будет создаваться большой массив
-------
посмотри еще в моторе эту функцию, там наверное проще сделано
21.
Дмитрий (08.08.2010 / 19:39)
ммм а подробней где и какую функцию смотреть? ибо я мотор не юзал... и еще, вот у тя стоит например '6|10' от 6ти до 10ти а как оформить от 6ти и более... блабла ... ?
22.
KOZZ (08.08.2010 / 19:43)
Mr-General (9 Августа 2010 / 02:39)
ммм а подробней где и какую функцию смотреть? ибо я мотор не юзал...
аналогично, поэтому хз ))
как оформить от 6ти и более... блабла ... ?
как я понял это для крайних статусов(самый низкий и самый большой).
я щас отойду мин на 5 - 10, потом придумаю че нить
23.
Дмитрий (08.08.2010 / 19:47)
Ну например мне впадлу писать, я хочу в этот массив засунуть например от 50 и до бесконечности один статус
24.
KOZZ (08.08.2010 / 20:15)
<?php
$plus = 10;
$minus = 50;
$avt = $plus-$minus;
$avt_name = array(
'Кидалко' => 'inf|-11',
'Барыжко' => '-10|-6',
'Салага' => '-5|-1',
'Зеленый' => '0|5',
'Чайник' => '6|10',
'Наш чел' => '11|15',
'Уважаемый' => '16|20',
'Почётный' => '21|30',
'Вышибало' => '31|inf'
);
foreach($avt_name as $name =>$num){
list($min,$max) = explode('|',$num);
if(($min == 'inf' && $avt<=$max) or ($max == 'inf' && $avt>=$max)){$status = $name;break;}
else{
$nums_range = range($min,$max);
# echo $name.' от '.$min.' до '.$max.'<br/>';
if(in_array($avt,$nums_range)) {$status = $name;break;} else {continue;}
}
}
echo 'Статус: '.$status.'<br/>'.'Авторитет: '.$avt.'( + '.$plus.' | '.$minus.' - )';
?>
вот как то так
25.
KOZZ (08.08.2010 / 20:30)
с тебя кружка пива
26.
Дмитрий (08.08.2010 / 20:35)
ок спс гг
я за пивом
27.
Дмитрий (09.08.2010 / 01:15)
Кстати inf не пашет
28.
KOZZ (09.08.2010 / 01:19)
27, сам ты не пашешь
все норм пашет! нужно чтобы было только в крайних статусах (иначе как в них это не нужно по определению
)
URL:
https://visavi.net/topics/12400