Как сложить такой массив по одинаковым 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>'; |
ВО!
Спустя 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 написал(а):
спасибо большое. Просто опыта не много да и про точку забыл))