2016-07-16 6 views
1

何らかの理由で私はこの問題を抱えていますが、私は以下のようなPHPで多次元配列を持っています(MySQLデータ)。私がしたいのは、 "dealerID"に基づいて重複配列を削除することです。PHPで多項式配列の重複配列を取り除く

以下の例では、配列を検索し、duplicateの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" 
    } 

望ましい結果、配列のみ:

私が試してみました何
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; 

例、これを取ります

+0

はOK、私はdealerID' –

+1

'グループ上記のコードでそれを置く私が試したものを入れます配列を比較する単一のコマンドもありますが、配列が常に同じサイズではないので動作しないと思います。 – splash58

+0

で –

答えて

1
$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); 
+0

ありがとう、あなたは+ 1キーが何をしているのか教えていただけますか?私はこのために配列の1つを無視しているようです –

+0

実際には少なくとも1つのdupを残しているようです... hmmm –

+0

いいえただ適用して、私に伝えてください。それで、それは少なくとも1つの価値を残しています。重複した値を削除する必要があります。重複した値を削除する必要はありません。私はあなたがそれらの1つが必要であると信じて、それは重複を削除する:) – Mickey

0
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 
     ) 
) 
関連する問題