我有一个数组。如何比较值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_map
、implode
和explode
函数的解决方案:
$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);
缺点:您必须确保_
不存在于任何原始字符串中。。。