На работе мне потребовалось сделать скрипт для подсчета в процентах сделанной работы. Вся сложность заключалась в том, что должны отображаться проценты сделанной работы. Я не сразу придумал алгоритм расчёта сделанной работы в процентах. Я зашел на яндекс и прочитал несколько статей. Я не нашел для себя нужного скрипта, но я увидел алгоритм расчёта. Я приведу вам простой вариант моего скрипта.
//голосование для двух рубрик
function voting($php, $jquery)
{
$votingArr = array();
$sum = $php + $jquery;
$one = ($sum * 1)/100; // один процент
$votingArr['php'] = round(($php * 100) / $sum)." %";
$votingArr['jquery'] = round(($jquery * 100) / $sum)." %";
return $votingArr;
}
$a = voting(8, 5, 5);
print_r($a);
Обратите внимание на то, что функция принимает два параметра. Вы можете сделать больше входных параметров. Допустим у вас не 2 рубрики, а 4. Вам придётся добавить еще 2 входных параметра. Например, voting($php, $jquery, $html, $css). Затем нужно сменить значение для $sum. $sum = $php + $jquery + $html + $css. Значение $votingArr['php'] вычисляется с по формуле $php * 100 / $sum. Значение вы умножаете на 100% и делите на общую сумму. Таким образом вы получаете процент голосования за выбранную рубрику. Число превратилось в строку. Для этого я применил конкатенацию ." %". Как понять чему равен один процент? $one = ($sum * 1) / 100. Вы можете не умножать сумму на единицу, а сразу выполнить деление на 100. Вы получите значение равное 1% от суммы. Соответственно 2% - это $one *= 2.
Теперь я немного усложню скрипт. Каждый раз менять функцию утомительно. Можно в входной параметр передать только один массив и этого будет достаточно. Функция round() округляет значение до целого числа. Читайте о функции round на странице как округлить дробные числа PHP. Сколько бы ни было элементов в массиве, функция обработает каждый элемент массива.
//голосование для множества рубрик
function voting($arr)
{
//для будущих значений
$votingArr = array();
/* по умолчанию сумма
всех значений равна 0 */
$sum = 0;
foreach($arr as $key => $value)
{
$sum + = $value;
}
// один процент
$one = ($sum * 1) / 100;
foreach($arr as $key => $value)
{
$votingArr[$key] = round( ($value * 100) / $sum )." %";
}
return $votingArr;
}
$arr = array('php'=> 10, 'jqueru' => 15,
'ruby' => 20, 'html' => 33);
$a = voting($arr);
print_r($a);
//Array ( [php] => 13 % [jqueru] => 19 %
//[ruby] => 26 % [html] => 42 % )
Для того чтобы эта функция сработала, вам нужно сделать таблицу в базе данных. Вы должны выбрать значения всех рубрик и их название. Затем вы должны сделать кнопку или картинку. Нажатие на кнопку должно к приводить к увеличению значения на 1 единицу. Когда функция вернёт массив, вы должны снова записать новые значения в базу данных. Вытащить значение -> пересчитать -> записать значения в базу. Вы можете вместо подсчёта рубрик подсчитать процент выполненной работы. Вы должны будите вывести один элемент массива. Вы также можете вывести процент невыполненной работы.