2017-02-12 38 views
1

我有一個多維數組,我需要交叉檢查它是否有重複結果,如果它們重複,則使用重複結果刪除數組。我需要檢查3個密鑰是否有重複;號碼,出發和到達。這裏是一個示例陣列,其中第三個陣列是重複的,需要刪除:檢查多維數組中的重複結果

[Cars] => Array 
    (
     [0] => Array 
      (
       [cartype] => car1 
       [number] => 123 
       [craft] => 456 
       [departure] => GHY 
       [departtime] => 20:25 
       [arrival] => PUI 
       [arrivetime] => 22:50 
      ) 

     [1] => Array 
      (
       [cartype] => car2 
       [number] => 567 
       [craft] => 890 
       [departure] => LHY 
       [departtime] => 16:25 
       [arrival] => PGY 
       [arrivetime] => 23:50 
      ) 
     [2] => Array 
      (
       [cartype] => car2 
       [number] => 567 
       [craft] => 890 
       [departure] => LHY 
       [departtime] => 16:25 
       [arrival] => PGY 
       [arrivetime] => 23:50 
      ) 

    ) 

我真的很感謝一些幫助。

謝謝,

+0

你必須檢查所有的數組元素,或者只是'number'? – Barmar

+0

您可以使用'serialize()'將每個數組轉換爲一個字符串,使用'array_unique()'移除重複項,然後使用'unserialize()'將它們轉換回數組。 – Barmar

+0

http://stackoverflow.com/questions/307674/how-to-remove-duplicate-values-from-a-multi-dimensional-array-in-php – bxN5

回答

1

使用in_array功能和定製的溶液$hash_map容器(每個條目是由numberdeparturearrival鍵的值):

// $arr is your initial array 

// hash container 
$hash_map = []; 
foreach ($arr['Cars'] as $k => &$v) { 
    $hash = $v['number'] . $v['departure'] . $v['arrival']; 
    if (in_array($hash, $hash_map)) { 
     unset($arr['Cars'][$k]); // removing duplicate item  
    } else { 
     $hash_map[] = $hash;  
    } 
} 
unset($hash_map); 

print_r($arr); 
0

嘗試,以便下列操作以完全刪除相同的重複子數組。

$arr = [['cartype' => 'car1','number' => '123','departure' => 'GHY','arrival' => 'PUI'], 
     ['cartype' => 'car2','number' => '567','departure' => 'LHY','arrival' => 'PGY'], 
     ['cartype' => 'car2','number' => '567','departure' => 'LHY','arrival' => 'PGY']]; 
$out = []; 
while (list($k, $v) = each($arr)) { 
if(!in_array($v,$out)) { 
    array_push($out,$v); 
} 
} 
print_r($out); 
// output 
Array 
(
    [0] => Array 
     (
      [cartype] => car1 
      [number] => 123 
      [departure] => GHY 
      [arrival] => PUI 
     ) 

    [1] => Array 
     (
      [cartype] => car2 
      [number] => 567 
      [departure] => LHY 
      [arrival] => PGY 
     ) 
) 

檢查的例子here

編輯 在你只需要使用檢查重複結果的情況下。

$arr = [['cartype' => 'car1','number' => '123','departure' => 'GHY','arrival' => 'PUI'], 
     ['cartype' => 'car2','number' => '567','departure' => 'LHY','arrival' => 'PGY'], 
     ['cartype' => 'car2','number' => '567','departure' => 'LHY','arrival' => 'PGY']]; 
$out = []; 
$checks = []; 
while (list($k, $v) = each($arr)) { 
if(!in_array([$v['number'],$v['departure'],$v['arrival']],$checks)) { 
    array_push($checks,[$v['number'],$v['departure'],$v['arrival']]); 
    array_push($out,$v); 
} 
} 
print_r($out); 
// output 
Array 
(
    [0] => Array 
     (
      [cartype] => car1 
      [number] => 123 
      [departure] => GHY 
      [arrival] => PUI 
     ) 

    [1] => Array 
     (
      [cartype] => car2 
      [number] => 567 
      [departure] => LHY 
      [arrival] => PGY 
     ) 
) 

檢查新的例子here