将相似的URL合并到数组中

问题描述 投票:-1回答:1

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

php arrays merge array-merge
1个回答
1
投票

如果循环数组并使用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);

https://3v4l.org/f7hbH


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);
© www.soinside.com 2019 - 2024. All rights reserved.