Как улучшить алгоритм, где мы объединяем строки массива

У меня есть такой массив =>
это результат запроса Google Analytics. Я просил количество посещений за последние три месяца.

$statPerMonth
array (size=2)
'08' =>     // The month (August)
array (size=34)
0 =>
array (size=3)
0 => string '08' (length=2) // Month again
1 => string 'admin.testweb.fr' (length=19) // host
2 => string '1' (length=1)  // amount of visits
1 =>
array (size=3)
0 => string '08' (length=2)
1 => string 'audigie-espace-auto.reseau-fivestar.fr' (length=38)
2 => string '6' (length=1)
2 =>
array (size=3)
0 => string '08' (length=2)
1 => string 'www.audigie-espace-auto.reseau-fivestar.fr' (length=31)
2 => string '9' (length=1)
3 =>
array (size=3)
0 => string '08' (length=2)
1 => string 'carrosserie-abberis.reseau-fivestar.fr' (length=38)
2 => string '7' (length=1)
'07' =>
array (size=47)
0 =>
array (size=3)
0 => string '07' (length=2)
1 => string 'www.anothersite.testweb.fr' (length=13)
2 => string '1' (length=1)
1 =>
array (size=3)
0 => string '07' (length=2)
1 => string 'admin.testweb.fr' (length=16)
2 => string '2' (length=1)
2 =>
array (size=3)
0 => string '07' (length=2)
1 => string 'admin.testweb.fr' (length=19)
2 => string '1' (length=1)
3 =>
array (size=3)
0 => string '07' (length=2)
1 => string 'audigie-espace-auto.reseau-fivestar.fr' (length=38)
2 => string '20' (length=2)
4 =>
array (size=3)
0 => string '07' (length=2)
1 => string 'www.admin.testweb.fr' (length=19)
2 => string '1' (length=1)

Этот массив представляет количество посещений моих сайтов но
Вы можете видеть, что значения [ «08»] [ «1»] а также [ «08»] [ «2»] являются идентичными (только «www.» отличается)
Я хочу объединить эти ячейки и добавить их значение (потому что это один и тот же сайт!), Чтобы получить общее количество посещений сайта с двумя именами хостов.

Рассматривать $ сайтов как массив объектов сайта (веб-сайтов).
getHost () Метод возвращает хост сайта для примера my-host.fr без www.
рассматривать $ statsPerMonth массив объяснил выше

наконец, рассмотрим этот алгоритм

foreach ($statsPerMonth as $actualMonth => $stats) {
foreach($sites as $site) {
$siteHost = $site->getHost();
foreach ($stats as $row) {
if (strstr($row['1'], $siteHost)) {
if(isset($globalStats[$actualMonth][$siteHost])) {
$globalStats[$actualMonth][$siteHost] = $globalStats[$actualMonth][$siteHost] + $row['2'];
} else {
$globalStats[$actualMonth][$siteHost] = 0;
$globalStats[$actualMonth][$siteHost] = $globalStats[$actualMonth][$siteHost] + $row['2'];
}
}
if(!isset($globalStats[$actualMonth][$siteHost])) {
$globalStats[$actualMonth][$siteHost] = 0;
}
}
}
}

Этот алгоритм возвращает $ globalStats массив в этой форме

array (size=3)
'08' =>
array (size=43)
'carrosserie-la-cascade.reseau-fivestar.fr' => int 1
'audigie-espace-auto.reseau-fivestar.fr' => int 15
'carrosserie-abberis-fivestar.fr' => int 16
'carrosserie-arenales-jonathan.reseau-fivestar.fr' => int 0
'07' =>
array (size=43)
'carrosserie-la-cascade.reseau-fivestar.fr' => int 2
'audigie-espace-auto.reseau-fivestar.fr' => int 20
'carrosserie-abberis-fivestar.fr' => int 0
'carrosserie-arenales-jonathan.reseau-fivestar.fr' => int 4
'06' =>
array (size=43)
'carrosserie-la-cascade.reseau-fivestar.fr' => int 0
'audigie-espace-auto.reseau-fivestar.fr' => int 29
'carrosserie-abberis-fivestar.fr' => int 0
'carrosserie-arenales-jonathan.reseau-fivestar.fr' => int 4

Это именно то, что я хочу, но я думаю, что мы можем улучшить этот алгоритм, чтобы сделать его более эффективным (потому что массивы большие). Есть ли у вас идеи, чтобы сделать этот алгоритм лучше?

Спасибо.

0

Решение

Попробуйте заменить все «foreach» на «for», например:

  foreach ($array as $key => $value) {

}

от

  $keys = array_keys($array);
$keyCount = count($keys);

for($i = 0; $i < $keyCount; $i++) {
$key = $keys[$i];
$value = $array[$key];
}
0

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

Других решений пока нет …