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

从多维数组中删除重复的元素-PHP,php,arrays,Php,Arrays,我有两个数组和$my_数组。还有重复的数组,它们的位置不同 这是$my_数组: Array ( [0] => Array ( [Position] => 0 [Moteur] => Bing.com France - (Tout afficher) [Mot Clé] => BTS esf 24 [Site] => http://www.test.com [Page positi

我有两个数组和
$my_数组
。还有重复的数组,它们的位置不同 这是
$my_数组

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']
!你知道我怎样才能做到吗?谢谢

假设职位以递增的顺序出现,我将如下:
-反转阵列。
-扫描阵列并将“Mot Clé”存储在另一个阵列中。在存储之前,请检查它是否已经存在。如果存在,则删除第一个数组中的条目

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()实现:

试试这个:

<?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>';
?>


我还考虑到,您的数组中可能有其他类型的“Mot Clé”:)

@spencex“只留下拥有最大['Position']的人”不是什么意思吗?对不起,不,不是:(
<?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>';
?>