从数组中删除重复数字的数字

问题描述 投票:0回答:3

我想从数组中删除其中有重复数字的数字。

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));
        }
   }
}
php arrays filtering
3个回答
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

0
投票

这应该适合你:

这里我首先将

str_split()
每个元素放入一个单独的数组中,并用
array_map()
。之后,我只需将分割后的数组与具有
array_unique()
数字的相同数组进行比较,并检查它们是否相同。如果是,我返回
implode()
数字,否则返回 false。最后我只是用
array_filter()
过滤掉 false 的元素。

所以换句话说,我只是比较这两个数组,它们是相同的:

数组1:

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 )

0
投票

每当需要通过正则表达式过滤数组时,理想的工具就是

preg_grep()

该模式将匹配任何(非换行符)字符,然后匹配零个或多个任何字符,然后匹配第一个(捕获的)字符。

要保留不包含至少一个重复字符的值,请使用:(Demo)

var_export(preg_grep('/(.).*\1/', $array, PREG_GREP_INVERT));
// ['8397', '9652', '4378', '8431', '5349', '7068']

要保留至少包含一个重复字符的值,请使用:

var_export(preg_grep('/(.).*\1/', $array));
// ['4149', '3199', '7999']
© www.soinside.com 2019 - 2024. All rights reserved.