2014-01-10 3 views
0

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

Сейчас я desperatley пытается вычислить суммы из многомерного массива, который выглядит следующим образом:

Date -> Medium -> Device -> KPI 

В примере:

2014-09-10 :: organic :: desktop :: visits == 10<br> 
2014-09-10 :: organic :: tablet :: visits == 3<br> 
2014-09-10 :: organic :: desktop :: conversion = 1.9<br> 
2014-09-10 :: organic :: tablet :: conversion = 1.2<br> 
2014-09-10 :: paid :: desktop :: visits == 9<br> 
2014-09-10 :: paid :: tablet :: visits == 4<br> 
2014-09-10 :: paid :: desktop :: conversion = 3.4<br> 
2014-09-10 :: paid :: tablet :: conversion = 3.1 

Вопрос 1: Как может Я рассчитываю суммы всех посещений или всех коэффициентов конверсии?

Вопрос 2: Как я могу рассчитать, например, все коэффициенты конверсии на планшетах?

Я попытался использовать array_sum, но не могу понять, как разбить его на разные параметры. Я думал о чем-то вроде array_sum($thearray['2014-09-10']['visits'], но это могло быть легкомысленным.

Есть ли у вас идеи о том, как прийти к решению?

Спасибо и все самое лучшее!

+0

добавить вам фактический массив в вопрос. –

ответ

0
$items = array(
    array('date' => '2014-09-10','type' => 'desktop', 'visits' => 10), 
    array('date' => '2014-09-10', 'type' => 'tablet', 'conversion' => 5), 
    array('date' => '2014-09-10', 'type' => 'desktop', 'visits' => 10), 
    array('date' => '2014-09-10', 'type' => 'desktop', 'visits' => 10), 
    array('date' => '2014-09-10','type' => 'tablet', 'conversion' => 10), 
    array('date' => '2014-09-10', 'type' => 'desktop', 'visits' => 5) 
); 

// sum of `visits` 
$sum = array_sum(array_map(function($item){ 
        return $item['visits']; 
       },$items)); 

var_dump($sum); 

// sum of `visits` by type `tablet` 
$sum = array_sum(array_map(function($item){ 
        return ($item['type']=='tablet')?$item['visits']:null; 
       },$items)); 

var_dump($sum); 
+0

Привет, это отлично работает, спасибо! Только один дополнительный вопрос: если я добавлю другое измерение как «источник», как я могу проверить это? Итак, все визиты для планшетов из источника Google. Могу ли я связать эти условия? Еще раз спасибо. – user3182978

+0

@ user3182978 Да, изменение условия как у need.Example: 'return (($ item ['type'] == 'tablet') && ($ item ['source'] == 'Google')))? $ Item [ ''] посещение: нулевой; – voodoo417

+0

Большое вам спасибо - работает как шарм! Теперь я попытаюсь углубиться в array_map, чтобы узнать, какая здесь магия работает;) – user3182978

1

Я напишу его в псевдо-PHP-коде, это не мой язык, но идеи универсальны.

function sum($obj, $label){ 
    if(!is_array($obj)){ 
     return 0; 
    } 
    $count = 0; 
    foreach($obj as $key=>$val){ 
     if($key === $label){ 
      $count += $val; 
     } 
     if(is_array($val)){ 
      $count += sum($val, $label); 
     } 
    } 
    return $count; 
} 
0
$visits = 0; 
foreach($arr as $item) 
    $visits += $item ['visits']; 

echo $visits; 
Смежные вопросы