2017-02-12 8 views
1

私は多次元配列を持っているので、重複した結果を調べるためにそれをチェックする必要があります。重複した結果がある配列を削除してください。私は重複のために3つのキーをチェックする必要があります。番号、出発と到着。ここでは、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 
      ) 

    ) 

私は本当に助けていただきありがとうございます。

おかげで、in_array機能及びカスタム$hash_map容器(各エントリはnumberdeparturearrivalキー値で構成されている)を使用して

+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

溶液:

// $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

EDITだけ重複した結果をチェックするために使用したい場合は

$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

関連する問題