Php, рассчитать процент на несколько предметов

Всего у меня 5 предметов, и я хотел бы рассчитать процент на основе поданных [данных]. Результат будет использован для круговой диаграммы.

Array
(
[0] => Array
(
[label] => Item1
[data] => 849
)

[1] => Array
(
[label] => Item2
[data] => 657
)

[2] => Array
(
[label] => Item3
[data] => 571
)

[3] => Array
(
[label] => Item4
[data] => 538
)

[4] => Array
(
[label] => Item5
[data] => 446
)

)

С помощью:

(5/[data])*100

не дает правильного результата, и я не уверен, как выполнить правильные вычисления.

1

Решение

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

$sum = array[0]['data'] + array[1]['data'] ...
$pc0 = array[0]['data'] / $sum * 100;
...

Я оставляю зацикливание на ОП.

// РЕДАКТИРОВАТЬ:
Что касается отсутствия чего-то лучшего, вот функция сокращения для получения суммы:

$sum = array_reduce($data_array, function($v1, $v2){ return $v1 + $v2['data']; });
1

Другие решения

Нет необходимости петли. array_column & array_sum поможет. Вы можете попробовать это —

$a= array(
array('label'=>"Item1",'data'=>849),
array('label'=>"Item2",'data'=>657),
array('label'=>"Item3",'data'=>571),
array('label'=>"Item4",'data'=>538),
array('label'=>"Item5",'data'=>446)
);

echo "Percentage : " . ((5 / (array_sum(array_column($a, 'data')))) * 100);

Выход

Percentage : 0.16334531198955
2

<?php
$array=array(0=>array('label'=>"Item1",'data'=>849),
1=>array('label'=>"Item2",'data'=>657),
2=>array('label'=>"Item3",'data'=>571),
3=>array('label'=>"Item4",'data'=>538),
4=>array('label'=>"Item5",'data'=>446)
);$val=0;
foreach($array as $value){
//print_r($value['data']);
$val+=$value['data'];
}
echo "output  =  ".(5/$val)*100;
?>
0

Если вы хотите, чтобы ваш код был гибким:

$array= [
0 => [
'label' => 'Item1',
'data' => 849,
],
1 => [
'label' => 'Item1',
'data' => 849,
],
2 => [
'label' => 'Item1',
'data' => 849,
],
3 => [
'label' => 'Item1',
'data' => 849,
],
4 => [
'label' => 'Item1',
'data' => 849,
],
5 => [
'label' => 'Item1',
'data' => 849,
]
];
foreach($array as $key => $val){
$sum +=$val['data'];
}
echo "output  =  ".(count($val['data'])/$sum)*100;
?>
0

Простой с loop способ сделать

$arr = array
(
0 => array
(
"label" => "Item1",
"data" => 849,
),

1 => array
(
"label" => "Item2",
"data" => 657,
),

2 => array
(
"label" => "Item3",
"data" => 571,
),

3 => array
(
"label" => "Item4",
"data" => 538,
),

4 => array
(
"label" => "Item5",
"data" => 446,
),

);

$totalElement = count($arr);
$data = 0;
foreach ($arr as $key => $value) {
$data += $value['data'];
}

echo ($totalElement/$data)*100;

результат

 0.16334531198955
0
По вопросам рекламы [email protected]