"Сложение" массивов.

Олег98

Новичок
Здравствуйте.

Имею исходные данные в виде массивов:
PHP:
$vehicle = array ('body' => 'sedan', 'color' => 'red', 'location' => 'Nsk');
массивов несколько тысяч, ключи постоянны, значения ключей случайны.
Необходимо подсчитать, сколько раз встречаются те или иные значения ключей, т. е. статистику вида:
PHP:
Body
(
    [sedan] => 15
    [roadster] => 4
    [minivan] => 1
    [pickup] => 1
)
Color
(
    [red] => 12
    [green] => 7
    [blue] => 1
    [black] => 1
)
Location
(
    [Nsk] => 20
    [Msk] => 1
)

Подскажите, в каком направлении копать?
Спасибо.
 
Как долго работает простой перебор каждого массива?
Как часто выполняется операция?

Если операция выполняется не часто возможно имеет смысл сделать простой перебор каждого массива
 
Простой перебор каждого массива занимает приблизительно 1.54 сек на каждую тысячу массивов.
Операция выполняется не критично часто, в принципе можно и с этим временем смириться, но я подумал - может быть существует какое-либо более элегантное решение :)
 
Спасибо.
Всё же интересует, существует ли более быстрый способ, или это "потолок".
 
откуда берутся данные?
 
А как мы можем подсказать «более элегантное решение», если ты своего не показал? Наиболее логично это делается так (в цикле считывание из этой файлопомойки очердного ключа-значения):

PHP:
<?php

$stats = array();

while( read($key, $value) )
{
    if( ! isset($stats[$key][$value]) )
    {
        $stats[$key][$value] = 0;
    }
    
    $stats[$key][$value]++;
}
 
Ну мне лично на ум приходят хранение в бд с подсчет там же.
 
Если это разовая задача - перебирайте массивы.

Если вам нужно сделать статистику в вебсервисе - храните и обслуживайте статистические данные в дополнительных таблицах.
 
Функция array_count_values() разворачивает массив , при этом ключами становятся уникальные значения , а значениями частота повторения этих значений.
 
Функция array_count_values() разворачивает массив , при этом ключами становятся уникальные значения , а значениями частота повторения этих значений.
Насколько я понимаю, это пригодно для одного массива, а у меня их великое множество :( И не хотелось бы 300МБ данных загонять в оперативку, в один массив.
В любом случае — спасибо.
 
Сверху