[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: сравнения массива
игорь
Как сложить такой массив по одинаковым agent?
Array
(
[0] => Array
(
[agent] => Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1
[domains] => 4
[count] => 15
)

[1] => Array
(
[agent] => Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1
[domains] => 3
[count] => 20
)

[2] => Array
(
[agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.48 Safari/525.19
[domains] => 3
[count] => 3
)

[3] => Array
(
[agent] => Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1
[domains] => 5
[count] => 12
)

)



Спустя 4 часа, 31 минута, 1 секунда (16.02.2009 - 23:40) jetistyum написал(а):
ну а что если как-то так
PHP
$newarray = array();
foreach (
$array as $item){
    
$newarray[$item['agent']][] = $item;
}


тогда он разложит его по агенту в новом массиве.

Спустя 50 минут, 35 секунд (17.02.2009 - 00:31) kirik написал(а):
PHP
function getSum($array)
{
    for(
$i 0$c count($array); $i $c$i++)
    {
        if(isset(
$array_tmp[$array[$i]['agent']]))
        {
            
$array_tmp[$array[$i]['agent']]['domains'] += $array[$i]['domains'];
            
$array_tmp[$array[$i]['agent']]['count'] += $array[$i]['count'];
        }
        else
        {
            
$array_tmp[$array[$i]['agent']] = $array[$i];
        }
    }
    return 
array_values($array_tmp);
}


$array = array(
        array(
'agent' => 'Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1''domains' => 4'count' => 15),
        array(
'agent' => 'Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1''domains' => 3'count' => 20),
        array(
'agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.48 Safari/525.19''domains' => 3'count' => 3),
        array(
'agent' => 'Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1''domains' => 5'count' => 12),
    );

$array getSum($array);
echo 
'<pre>';
print_r($array);
echo 
'</pre>';


ВО! smile.gif

Спустя 13 часов, 15 минут, 19 секунд (17.02.2009 - 13:46) игорь написал(а):
PHP
$array = array(
        array(
'agent' => 'Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1''ip'=>'127.0.0.1','domains' => 4'count' => 15),
        array(
'agent' => 'Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1''ip'=>'127.0.0.1','domains' => 3'count' => 20),
        array(
'agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.48 Safari/525.19''ip'=>'168.192.0.1','domains' => 3'count' => 3),
        array(
'agent' => 'Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1''ip'=>'168.192.0.1','domains' => 5'count' => 12),
    );

А вот если еще добавится еще один элемент в массив(ip) и слаживать можно будет если agent и ip одинаковы.

Спустя 7 часов, 38 минут, 59 секунд (17.02.2009 - 21:25) kirik написал(а):
Цитата (игорь @ 17.02.2009 - 05:46)
А вот если еще добавится еще один элемент в массив(ip) и слаживать можно будет если agent и ip одинаковы.

А в чем проблема?

PHP
function getSum($array)
{
    for(
$i 0$c count($array); $i $c$i++)
    {
        if(isset(
$array_tmp[$array[$i]['agent']]))
        {
            
$array_tmp[$array[$i]['agent'].$array[$i]['ip']]['domains'] += $array[$i]['domains'];
            
$array_tmp[$array[$i]['agent'].$array[$i]['ip']]['count'] += $array[$i]['count'];
        }
        else
        {
            
$array_tmp[$array[$i]['agent'].$array[$i]['ip']] = $array[$i];
        }
    }
    return 
array_values($array_tmp);
}

Спустя 13 часов, 35 минут, 38 секунд (18.02.2009 - 11:00) luker написал(а):
спасибо большое. Просто опыта не много да и про точку забыл))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.