一尘不染

php只返回数组中重复的条目

php

我想从数组中检索所有重复的条目。这在PHP中可行吗?

array(
    1 => '1233',
    2 => '12334',
    3 => 'Hello',
    4 => 'hello',
    5 => 'U'
);

我想返回一个仅包含重复值的数组:“ hello”。

所需的输出数组:

array(
    1 => 'Hello',
    2 => 'hello'
);

阅读 249

收藏
2020-05-29

共1个答案

一尘不染

您需要使函数不区分大小写,以获取所需的“ Hello” =>“ hello”结果,请尝试以下方法:

$arr = array(1=>'1233',2=>'12334',3 =>'Hello' ,4=>'hello', 5=>'U');

// Convert every value to uppercase, and remove duplicate values
$withoutDuplicates = array_unique(array_map("strtoupper", $arr));

// The difference in the original array, and the $withoutDuplicates array
// will be the duplicate values
$duplicates = array_diff($arr, $withoutDuplicates);
print_r($duplicates);

输出为:

Array
(
[3] => Hello
[4] => hello
)

通过@AlixAxel编辑:

这个答案很有误导性。它仅在此特定条件下有效。这个反例:

$arr = array(1=>'1233',2=>'12334',3 =>'Hello' ,4=>'HELLO', 5=>'U');

惨败 。另外,这不是保留重复项的方法:

array_diff($arr, array_unique($arr));

由于重复的值之一将在中array_unique,然后被斩波array_diff

通过@RyanDay编辑:

因此,请查看@Srikanth或@Bucabay的答案,这些答案适用于所有情况(查找Bucabay的大小写不敏感),而不仅仅是问题中指定的测试数据。

2020-05-29