使用array_cchunk()分离数组并删除重复的chunk


Seperate array using array_chunk() and remove chunk duplicates

我有一个数组。如何比较值3乘3,并删除任何3组重复项?

这是我尝试过的,但没有成功。

$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个匹配集)。没有任何重复

使用array_mapimplodeexplode函数的解决方案:

$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()首先对作为字符串处理的值进行排序,然后保留每个值遇到的第一个键,并忽略所有以下按键。

我认为重点是找到一个使array_unique工作的"对象",而类型"array"似乎不适合。类型"字符串"应该适合,我会尝试这样的东西:

$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);

缺点:您必须确保_不存在于任何原始字符串中。。。