在PHP中删除多维数组中的重复数组


removing duplicate arrays in multidimensional array in PHP

由于某些原因,我在PHP中有一个多维数组,如下所示(MySQL数据)。我想做的是删除任何基于"dealerID"的重复数组。

在下面的示例中,我想搜索阵列并删除任何重复的dealerID阵列。

举个例子:

array(2) {
  [0]=>
  array(3) {
    ["dealerID"]=>
     string(3) "634"
    ["Name"]=>
    string(15) "Dealer Name String"
    ["Other Name"]=>
    string(15) "Dealer Name String"
  }
  [1]=>
  array(3) {
    ["dealerID"]=>
     string(3) "777"
    ["Name"]=>
    string(15) "Dealer Name String"
    ["Other Name"]=>
    string(15) "Dealer Name String"
  }
  [2]=>
  array(2) {
    ["dealerID"]=>
     string(3) "777"
    ["Name"]=>
    string(15) "Dealer Name String"
  }
  [3]=>
  array(3) {
    ["dealerID"]=>
     string(3) "777"
    ["Name"]=>
    string(15) "Dealer Name String"
    ["Other Name"]=>
    string(15) "Dealer Name String"
  }
  [4]=>
  array(2) {
    ["dealerID"]=>
     string(3) "777"
    ["Name"]=>
    string(15) "Dealer Name String"
  }

所需结果,仅具有唯一经销商的阵列ID:

array(2) {
  [0]=>
  array(3) {
    ["dealerID"]=>
     string(3) "634"
    ["Name"]=>
    string(15) "Dealer Name String"
    ["Other Name"]=>
    string(15) "Dealer Name String"
  }
  [1]=>
  array(3) {
    ["dealerID"]=>
     string(3) "777"
    ["Name"]=>
    string(15) "Dealer Name String"
    ["Other Name"]=>
    string(15) "Dealer Name String"
  }

我尝试过的:

$copy = $array; // create copy to delete dups from
$used = array(); // used emails
  for( $i=0; $i<count($array); $i++ ) {
if ( in_array( $array[$i][0], $used ) ) {
    unset($copy[$i]);
}
else {
    $used[] = $array[$i][0];
}
}

和:

foreach($dealerList as $key => $subarray) {
    if ( in_array( $dealerList[$subarray], $used ) ) {
            echo "ALREADY";
     }
     else {
          $used[] = $dealerList[$subarray];
           echo "NOT ALREADY";
     }
    }
    #$dealerList = $copy;
$arr=array(
    array(
        'dealerID'=>344,
        'Name'  => 'sdds',
        'Other Name'
    ),
    array(
        'dealerID'=>400,
        'Name'  => 'sdds',
        'Other Name'
    ),
    array(
        'dealerID'=>400,
        'Name'  => 'sdds',
        'Other Name'
    ),
    array(
        'dealerID'=>347,
        'Name'  => 'sdds',
        'Other Name'
    ),
);

foreach($arr as $key=>$item){
    for($i=$key+1; $i<count($arr);$i++){
        if($item['dealerID']==$arr[$i]['dealerID']){
            unset($arr[$i]);
        }
    }
}
print_r($arr);

使用array_values函数的简短解决方案:

// $arr is your exemplary array from the question
$result = [];
foreach ($arr as $v) {
    $result[$v['dealerID']] = $v;
}
$result = array_values($result);
print_r($result);

输出:

Array
(
    [0] => Array
        (
            [dealerID] => 634
            [Name] => Dealer Name String
            [Other Name] => Dealer Name String
        )
    [1] => Array
        (
            [dealerID] => 777
            [Name] => Dealer Name String
            [Other Name] => Dealer Name String
        )
)