2016-04-14 8 views
0

配列があります。どのように私はvales 3 by 3を比較し、3つのセットが重複している場合は削除できますか?array_chunk()を使用して別の配列にチャンクの複製を削除する

これは私が試みたものですが動作しません。

$arr = array("bmw","white","class A", "mazda","red","demio", "Honda","maroon","vezel", "bmw","white","class A"); 
$chunks = array_chunk($arr,3); 
$finalArr = array_unique($chunks); 

これは私が上記のやろうとしているものの例である:

//original array 
$arr = ("bmw","white","class A", "mazda","maroon","class A", "Honda","maroon","vezel", "bmw","white","class A"); 

//separated array values to 3 by 3 sets 
"bmw", "white", "class A" 
"mazda", "maroon", "class A" 
"Honda", "maroon", "vezel" 
"bmw", "white", "class A" 

//Removing 3set duplicates and expected new array: 
$finalArr = ("bmw","white","class A", "mazda","maroon","class A", "Honda","maroon","vezel"); 
  • を私はチャンクの重複(3マッチングセット)を削除する方法を探しています。重複はありません。
+0

あなたはあなたが質問を編集できることを知っています:http://stackoverflow.com/q/36616687/3933332 ... – Rizier123

答えて

3

ソリューション型「string」が収まる必要があり、私はこのような何かをしようとするだろう、implodeexplode機能:

$arr = array("bmw","white","class A", "mazda","red","demio", "Honda","maroon","vezel", "bmw","white","class A"); 
$chunks = array_chunk($arr,3); 
$uniqueArr = array_unique(array_map(function($v){ return implode(",",$v); },$chunks)); 
$finalArr = array_map(function($v){ return explode(",",$v); },$uniqueArr); 

print_r($finalArr); 

出力:

Array 
(
    [0] => Array 
     (
      [0] => bmw 
      [1] => white 
      [2] => class A 
     ) 

    [1] => Array 
     (
      [0] => mazda 
      [1] => red 
      [2] => demio 
     ) 

    [2] => Array 
     (
      [0] => Honda 
      [1] => maroon 
      [2] => vezel 
     ) 
) 

array_unique()は、最初は文字列として扱わ値をソートし、各値のために遭遇した最初のキーを維持し、すべての 次のキーを無視します。

0

私は、オブジェクトがarray_uniqueになり、「配列」が適合しないように見える「オブジェクト」が見つかると思います。

$a0 = array_chunk($arr,3); 
// 
$a1 = array(); 
foreach ($a0 as $r) $a1[]= implode('_', $r); 
// 
$a2 = array_unique($a1); 
// 
$final = array(); 
foreach ($a2 as $r) $final[]= explode('_', $r); 

欠点:あなたは_は、元の文字列のいずれかに存在しないことを確認する必要があり... array_mapを使用して

関連する問題