Всего у меня 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
не дает правильного результата, и я не уверен, как выполнить правильные вычисления.
Я думаю, что вы хотите, чтобы суммировать все элементы, чтобы сначала получить общую сумму, а затем определить процент каждого элемента
$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']; });
Нет необходимости петли. 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
<?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;
?>
Если вы хотите, чтобы ваш код был гибким:
$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;
?>
Простой с 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