从多维数组中删除重复元素 - PHP

时间:2014-05-29 16:52:20

标签: php arrays

我有两个数组$my_array。并且存在具有不同['Mot Clé']的重复数组Position 这是$my_array

Array
(
[0] => Array
    (
        [Position] => 0
        [Moteur] => Bing.com France - (Tout afficher)
        [Mot Clé] => BTS esf 24
        [Site] => http://www.test.com
        [Page positionnée] => Pas de résultat
        [Titre de la page] => 
        [Date] => 28/02/2014
    )

[1] => Array
    (
        [Position] => 0
        [Moteur] => Bing.com France - (Tout afficher)
        [Mot Clé] => BTS esf 33
        [Site] => http://www.test.com
        [Page positionnée] => Pas de résultat
        [Titre de la page] => 
        [Date] => 28/02/2014
    )

[2] => Array
    (
        [Position] => 1
        [Moteur] => Bing.com France - (Tout afficher)
        [Mot Clé] => BTS esf 33
        [Site] => http://www.test.com
        [Page positionnée] => Pas de résultat
        [Titre de la page] => 
        [Date] => 28/02/2014
    )

[3] => Array
    (
        [Position] => 5
        [Moteur] => Bing.com France - (Tout afficher)
        [Mot Clé] => BTS esf 33
        [Site] => http://www.test.com
        [Page positionnée] => Pas de résultat
        [Titre de la page] => 
        [Date] => 28/02/2014
    )

)

我想取消复制,只留下最大['Position']的人!关于我如何实现这一点的任何想法?谢谢!

2 个答案:

答案 0 :(得分:1)

假设职位按升序排列,我会按以下方式行事:
  - 扭转阵列。
  - 扫描阵列并将“MotClé”存储在另一个阵列中。在存储之前,检查它是否已存在。如果它存在,则删除第一个数组中的条目。

array_reverse($my_array);
$keywords = array();
foreach($my_array as $key=>$value)
{
  $keyword = $value["Mot Clé"];
  if(isset($keywords[$keyword]))
    unset($my_array[$key]);
  $keywords[$keyword] = "";
}

如果位置没有按递增顺序出现,那么您必须事先按降序对数组进行排序。 使用usort()可以实现:

usort($$my_array, function($a, $b)
{
    if ($a["Position"] == $b["Position"]){ return 0;}
    else if ($a["Position"] > $b["Position"]){return -1;}
    else { return 1; }
});

答案 1 :(得分:1)

试试这个:

<?php
$arr = array(
    array(
        "Position" => 0,
        "Moteur" => "Bing.com France - (Tout afficher)",
        "Mot Clé" => "BTS esf 33",
        "Site" => "http://www.test.com",
        "Page positionnée" => "Pas de résultat",
        "Titre de la page" => "",
        "Date" => "28/02/2014"
    ),
    array(
        "Position" => 0,
        "Moteur" => "Bing.com France - (Tout afficher)",
        "Mot Clé" => "Test",
        "Site" => "http://www.test.com",
        "Page positionnée" => "Pas de résultat",
        "Titre de la page" => "",
        "Date" => "28/02/2014"
    ),
    array(
        "Position" => 0,
        "Moteur" => "Bing.com France - (Tout afficher)",
        "Mot Clé" => "BTS esf 33",
        "Site" => "http://www.test.com",
        "Page positionnée" => "Pas de résultat",
        "Titre de la page" => "",
        "Date" => "28/02/2014"
    ),
    array(
        "Position" => 1,
        "Moteur" => "Bing.com France - (Tout afficher)",
        "Mot Clé" => "BTS esf 33",
        "Site" => "http://www.test.com",
        "Page positionnée" => "Pas de résultat",
        "Titre de la page" => "",
        "Date" => "28/02/2014"
    ),
    array(
        "Position" => 1,
        "Moteur" => "Bing.com France - (Tout afficher)",
        "Mot Clé" => "Test",
        "Site" => "http://www.test.com",
        "Page positionnée" => "Pas de résultat",
        "Titre de la page" => "",
        "Date" => "28/02/2014"
    ),
    array(
        "Position" => 5,
        "Moteur" => "Bing.com France - (Tout afficher)",
        "Mot Clé" => "BTS esf 33",
        "Site" => "http://www.test.com",
        "Page positionnée" => "Pas de résultat",
        "Titre de la page" => "",
        "Date" => "28/02/2014"
    ),
    array(
        "Position" => 3,
        "Moteur" => "Bing.com France - (Tout afficher)",
        "Mot Clé" => "Test",
        "Site" => "http://www.test.com",
        "Page positionnée" => "Pas de résultat",
        "Titre de la page" => "",
        "Date" => "28/02/2014"
    ),
    array(
        "Position" => 0,
        "Moteur" => "Bing.com France - (Tout afficher)",
        "Mot Clé" => "Testing",
        "Site" => "http://www.test.com",
        "Page positionnée" => "Pas de résultat",
        "Titre de la page" => "",
        "Date" => "28/02/2014"
    ),
    array(
        "Position" => 8,
        "Moteur" => "Bing.com France - (Tout afficher)",
        "Mot Clé" => "Testing",
        "Site" => "http://www.test.com",
        "Page positionnée" => "Pas de résultat",
        "Titre de la page" => "",
        "Date" => "28/02/2014"
    ),
    array(
        "Position" => 9,
        "Moteur" => "Bing.com France - (Tout afficher)",
        "Mot Clé" => "Testing",
        "Site" => "http://www.test.com",
        "Page positionnée" => "Pas de résultat",
        "Titre de la page" => "",
        "Date" => "28/02/2014"
    ),
);

function sort_compare($a, $b) {
    return (($a["Position"] == $b["Position"]) ? 0 : (($a["Position"] > $b["Position"]) ? -1 : 1));
}

function remove_duplicates($array) {
    $return = array();
    $tmp = array();
    foreach($array AS $key => $value) {
        $tmp[$value["Mot Clé"]][] = $value;
    }

    foreach($tmp AS $key => $value) {
        usort($tmp[$key], "sort_compare");
    }

    foreach($tmp AS $key => $value) {
        if(is_array($value) && isset($value[0])) $return[] = $value[0];
    }

    return $return;
}

echo '<pre>';
print_r(remove_duplicates($arr));
echo '</pre>';
?>

我还考虑到你的阵列中可能有其他类型的“MotClé”:)