Заколдованные числа 100..199

mosquito

Новичок
Заколдованные числа 100..199

Описание.
Голосование использует одну картинку (одно деление) tick.gif, которая циклически выводится.
Перед выводом рассчитывается коэффициент масштабирования ($K), чтобы определить макс. кол-во шагов цикла.

$K рассчитывается след. образом:

находим максимальный элемент ($max) в массиве рез-тов ($results)
т.е. ответ за который большего всего проголосовали
затем, 80 делим на $max (80 - определяет макс. ширину графика,
состоящего из tick.gif).
Затем вывод.

PHP:
$max=max($results);
$K = 80/$max;

echo("<div>".$question."</div>");
echo "<TABLE>";

for ($i=0; $i<sizeof($results); $i++) {
       // вывод номера ответа
       echo("<TR><TD>".($i+1)."</TD><TD>");
       
       // вывод текста ответа
       echo($answers[$i]);
       echo("</TD><TD>");
       
       // вывод кол-ва ответов за данный ответ графиком
       for ($t=0; $t<ceil($K*$results[$i]); $t++) {
             echo("<IMG src=tick.gif>");
       }
       echo("</TD><TD>");
       
       // вывод процентного соотношения
       $percent = number_format(100*$results[$i]/array_sum($results), 2);
       echo($percent."%");
       echo("</TD><TD>".$results[$i]."</TD></TR>");
}
echo("</TABLE>");
echo("Всего проголосовавших: ". array_sum($results));
echo "</TD></TR></TABLE>";

Перед этим надо забить массив с рез-тами голосования:
$results[0]=1;
$results[1]=10;
$results[2]=100;

Проблема такая:
Если сделать макс. результат равным 100..199 или 1000..1999 и т.д. то выводит неправильно т.е. если $max=120 то будет выводить 120 картинок tick.gif, а не (80/120)*120=80
 

SelenIT

IT-лунатик :)
а что показывает вывод переменной $K и значения ф-ции ceil($K*$results[$i]) ?

PS. По-моему, неэффективный способ вывода диаграммы. Зачем картинку tick.gif клонировать 80 раз, если можно, например, просто полжить ее бэкграундом на вложенную таблицу заданной ширины? А если картинка однопиксельной ширины - вообще растянуть и все...
 

mosquito

Новичок
Я понимаю, что метод не очень эффективный, потом я его переделаю.

-------
$results[0]=1;
$results[1]=2;
$results[2]=100;

$max=max($results);

print_r($max);

// вывод: 2
-------

вот здесь и ошибка
значит функция max() неправильно работает?
 

Bred Vilchec

Новичок
mosquito
Ты уверен? У меня выводит 100. Какая у тебя версия ПХП?
Может это баг относительно старой версии, которого стошнило от идентификатора переменной с зарезервированным именем?
Попробуй сделать $_max хотя бы.
 

mosquito

Новичок
ага, у меня тоже 100
если именно такой код как выше


а вот с таким кодом выводит "2":

-----
$results = file("results.txt");
$max=max($results);
print_r($max); // 2
-----

results.txt:
1
2
100
 

SelenIT

IT-лунатик :)
ну так ясно
он же СТРОКИ сравнивает
нужно явно тип задать, типа такого
PHP:
$results = file("results.txt");
foreach ($results as $i=>$rez)
    $results[$i] = intval($rez);
$max=max($results);
print_r($max);
 
Сверху