如何根据子数组中的重复元素删除子数组?

时间:2017-07-10 07:28:49

标签: php arrays multidimensional-array duplicates

如何根据In [27]: result_ = set(([tuple(sorted(row)) for row in arr])) In [28]: result = [list(i) for i in result_] In [29]: result Out[29]: [[0, 1], [1, 2], [6, 7], [5, 6], [2, 3], [3, 4]]

检查并删除数组中的重复项

这是我的阵列:

ProductReference

3 个答案:

答案 0 :(得分:2)

将唯一值设为您的密钥:

$newArray = array();
foreach($oldArray as $product){
    $newArray[$product['ProductReference']] = $product;
}

答案 1 :(得分:1)

这可以解决您的问题或指导您。您可以根据任何密钥删除重复。如果您可以在数据库查询中进行,那将更好。直接从php manual

复制
<?php 
$details = array( 
    0 => array("id"=>"1", "name"=>"Mike",    "num"=>"9876543210"), 
    1 => array("id"=>"2", "name"=>"Carissa", "num"=>"08548596258"), 
    2 => array("id"=>"1", "name"=>"Mathew",  "num"=>"784581254"), 
); 

function unique_multidim_array($array, $key) { 
    $temp_array = array(); 
    $i = 0; 
    $key_array = array(); 

    foreach($array as $val) { 
        if (!in_array($val[$key], $key_array)) { 
            $key_array[$i] = $val[$key]; 
            $temp_array[$i] = $val; 
        } 
        $i++; 
    } 
    return $temp_array; 
} 

$details = unique_multidim_array($details,'id'); 
var_dump($details);

输出

$details = array( 
    0 => array("id"=>"1","name"=>"Mike","num"=>"9876543210"), 
    1 => array("id"=>"2","name"=>"Carissa","num"=>"08548596258"), 
); 

答案 2 :(得分:1)

当找到新的重复子阵列时,此单行将覆盖早期的子阵列:(Demo

$array=array_values(array_column($array,null,"ProductReference"));

这个双线将保留早期的子阵列并丢弃后面的子阵列:(Demo

$rekeyed=array_column(array_reverse($array),null,"ProductReference");
sort($rekeyed);

apokryfos确定了保留早期子阵列并删除后续子阵列的最短/最甜蜜的方法:(Demo

$array=array_unique($array,SORT_REGULAR);
// if the keys are important wrap array_unique() with array_values()