合并数组中的相似URL

时间:2019-09-28 18:28:08

标签: php arrays regex merge array-merge

我有一个数组,其中包含来自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?

1 个答案:

答案 0 :(得分:0)

好,我解决了这个问题:

$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);