我想从数组中删除重复数字的数字。
array('4149','8397','9652','4378','3199','7999','8431','5349','7068');
到
array('8397','9652','4378','8431','5349','7068');
我试过这件事
foreach($array as $key => $value) {
$data = str_split($value, 1);
$check = 0;
foreach($data as $row => $element) {
$check = substr_count($value, $element);
if($check != 1) {
array_diff($array, array($value));
}
}
}
答案 0 :(得分:0)
这应该适合你:
这里我首先将str_split()
每个元素放入一个带array_map()
的单独数组中。在此之后,我只是将分裂的数组与具有array_unique()
数字的相同数组进行比较,并检查它们是否相同。如果是,我返回implode()
号,否则为假。最后,我只使用array_filter()
输出错误过滤元素。
所以换句话说,我只是将这两个数组进行比较,它们是相同的:
ARRAY1:
Array
(
[0] => Array
(
[0] => 4
[1] => 1
[2] => 4
[3] => 9
)
//...
)
数组2:
Array
(
[0] => Array
(
[0] => 4
[1] => 1
[3] => 9
)
//...
)
代码:
<?php
$arr = ['4149', '8397', '9652', '4378', '3199', '7999', '8431', '5349', '7068'];
$arr = array_map("str_split", $arr);
$result = array_filter(array_map(function($v1, $v2){
return ($v1 === $v2?implode("", $v1):false);
}, $arr, array_map("array_unique", $arr)));
print_r($result);
?>
输出:
Array ( [1] => 8397 [2] => 9652 [3] => 4378 [6] => 8431 [7] => 5349 [8] => 7068 )
答案 1 :(得分:0)
您可以使用匹配的正则表达式过滤数组:
(.)
任何角色.*
后跟零个或多个字符\1
后面再加上第一个字符示例代码:
$array = array('4149','8397','9652','4378','3199','7999','8431','5349','7068');
$result = array_filter(
$array,
function ($number) {
return !preg_match('/(.).*\\1/', $number);
}
);
echo implode(', ', $result), PHP_EOL;
输出:
8397, 9652, 4378, 8431, 5349, 7068