我有一个数组,其中包含来自Google Analytics(分析)的URL视图的数量。我想合并类似地址的显示。
例如,我有这样一个数组:
array(
array(
'/news/259670-lorem-ipsum/',
'20715'
),
array(
'example.com/news/259670-lorem-ipsum/',
'451'
),
array(
'example.com/news/259670-lorem-ipsum/?amp_lite=',
'5'
),
array(
'/news/259670-lorem-ipsum/amp/',
'54'
),
array(
'/reviews/259671-dolor-amp-sit-amet/',
'10732'
),
array(
'example.com/reviews/259671-dolor-amp-sit-amet/?fbclid=1234567890',
'41'
),
array(
'/reviews/259671-dolor-amp-sit-amet/amp/?fbclid=1234567890',
'2'
),
);
最终结果应如下所示:
array(
'/news/259670-lorem-ipsum/' => 21225,
'/reviews/259671-dolor-amp-sit-amet/' => 10775
)
如何使用PHP?
如果循环数组并使用preg_match来解析URL。
然后将值添加到关联数组中。
foreach($pages as $val){
preg_match("/\/?(example\.com)?\/(\w+)\/(\w+)/", $val[0], $m);
if(!isset($res[$m[2]][$m[3]])){
$res[$m[2]][$m[3]] = $val[1];
}else{
$res[$m[2]][$m[3]] += $val[1];
}
}
var_dump($res);
好,我解决了问题:
$res = array();
foreach($pages as $page){
// Remove domain
$url = preg_replace('/\/?(example\.com)/i', '$2', $page[0]);
// Remove query string
$url = preg_replace('/(\/[^?]+).*/i', '$1', $url);
// Remove AMP
$url = preg_replace('/\/amp\/\z|\/amp$/i', '/', $url);
if(array_key_exists($url, $res)){
$res[$url] += $page[1];
} else{
$res[$url] = $page[1];
}
}
var_dump($res);