2014-03-11 4 views
0

У меня есть следующий массив $browser:Вычислить процент значений в массиве

Array 
(
    [2] => Array 
     (
      [0] => Internet Explorer 
      [1] => 5809 
     ) 

    [3] => Array 
     (
      [0] => Chrome 
      [1] => 9205 
     ) 

    [4] => Array 
     (
      [0] => Safari 
      [1] => 5288 
     ) 

    [5] => Array 
     (
      [0] => Opera 
      [1] => 102 
     ) 

есть способ вычислить для каждого элемента в процентах. Я пробовал эту функцию:

foreach ($browser as $key => $value){ 
print_array(array_avg($browser[$key][1])); 
    } 

function array_avg($array, $round=1){ 
$num = count($array); 
return array_map(
    function($val) use ($num,$round){ 
     return array('count'=>$val,'avg'=>round($val/$num*100, $round)); 
    }, 
    array_count_values($array)); 
} 

Есть ошибки в моем коде? Спасибо!

+1

Можете ли вы объяснить, что вы хотите сделать? – tnanoba

+0

Рассчитать сумму всех чисел для общей суммы. Рассчитайте процент как * total/100 \ * number *. – deceze

+0

Я хочу заменить для каждого элемента его процент. Например, для 'Internet Explorer' я бы хотел, чтобы' 5809' был '65.51%' "например" и так далее. – SpencerX

ответ

2

попробовать что-то вроде этого:

// calculate the sum; first transform the array in something with only integers, then sum that array 
$sum = array_sum(array_map(function ($a) { return $a[1]; }, $browser)); 

// walk through the array, print the percentage (value/sum) for each browser 
foreach ($browser as $info) { 
    echo 'Percentage for browser '.$info[0].' = '.round(($info[1]/$sum)*100).'%<br>'; 
} 
+0

Спасибо, человек! – SpencerX

Смежные вопросы