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

Олег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
)
Подскажите, в каком направлении копать?
Спасибо.
 

shelestov

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

Если операция выполняется не часто возможно имеет смысл сделать простой перебор каждого массива
 

Олег98

Новичок
Простой перебор каждого массива занимает приблизительно 1.54 сек на каждую тысячу массивов.
Операция выполняется не критично часто, в принципе можно и с этим временем смириться, но я подумал - может быть существует какое-либо более элегантное решение :)
 

Олег98

Новичок
Спасибо.
Всё же интересует, существует ли более быстрый способ, или это "потолок".
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
откуда берутся данные?
 

Вурдалак

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

PHP:
<?php

$stats = array();

while( read($key, $value) )
{
    if( ! isset($stats[$key][$value]) )
    {
        $stats[$key][$value] = 0;
    }
    
    $stats[$key][$value]++;
}
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну мне лично на ум приходят хранение в бд с подсчет там же.
 

no_santa

Снегур
Если это разовая задача - перебирайте массивы.

Если вам нужно сделать статистику в вебсервисе - храните и обслуживайте статистические данные в дополнительных таблицах.
 

grem15

Новичок
Функция array_count_values() разворачивает массив , при этом ключами становятся уникальные значения , а значениями частота повторения этих значений.
 

Олег98

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