PHP删除"有点"从数组中重复

时间:2014-05-03 01:19:02

标签: php arrays duplicates

我的数组由网址组成,我注意到有几个是“有些”重复。 基本上一些网址只有一个www。在网址前面,有些网站没有www。 我如何找到重复的那些,然后踢出具有较低域值的那个?

我玩过array_unique(),但问题是由于www,我的数组不是正确的重复项。

当前数组:

Array
(
    [0] => Array
        (
            [url] => www.domain1.com
            [domain_value] => 653
        )
    [1] => Array
        (
            [url] => www.domain2.com
            [domain_value] => 412
        )
    [2] => Array
        (
            [url] => www.domain3.com
            [domain_value] => 723
        )
    [3] => Array
        (
            [url] => domain1.com
            [domain_value] => 543
        )
    [4] => Array
        (
            [url] => domain2.com
            [domain_value] => 956
        )

)

我的目标:

Array
(
    [0] => Array
        (
            [url] => www.domain1.com
            [domain_value] => 653
        )
    [1] => Array
        (
            [url] => www.domain3.com
            [domain_value] => 723
        )
    [2] => Array
        (
            [url] => domain2.com
            [domain_value] => 256
        )

)

2 个答案:

答案 0 :(得分:2)

你可以通过多种方式做到这一点。

第一个选项是将它们分成两个不同的数组: WWW &的 NONWWW 您可以使用preg_matchstrpos执行此操作。 (strpos示例在下面注释掉。)

这方面的一个例子是这样的:

<?php
$www = array();
        $nonwww = array();
        foreach ($array as $domain) {
            // USING PREG_MATCH
            if (preg_match('/www/', $domain['url'])) {
                $www[] = $domain;
            } else {
                $nonwww[] = $domain;
            }

            // USING STRPOS
            //if (strpose($domain['url'], 'www') !== FALSE) {
            //    $www[] = $domain;
            //} else {
            //    $nonwww[] = $domain;
            //}
        }

?>

现在这将返回两个数组:

<强> WWW

Array
(
    [0] => Array
        (
            [url] => www.domain1.com
            [domain_value] => 653
        )

    [1] => Array
        (
            [url] => www.domain2.com
            [domain_value] => 412
        )

    [2] => Array
        (
            [url] => www.domain3.com
            [domain_value] => 723
        )

)

<强> NONWWW

Array
(
    [0] => Array
        (
            [url] => domain1.com
            [domain_value] => 543
        )

    [1] => Array
        (
            [url] => domain2.com
            [domain_value] => 956
        )

)

现在你所要做的就是匹配域名和www并删除重复项然后将它们合并回去?

答案 1 :(得分:0)

循环遍历你的数组和每个项目。检查其中是否包含www,并查看是否存在除www已删除之外的相同条目。如果有,则删除条目