gpt4 book ai didi

php - 在数组中找到两个相等的值

转载 作者:行者123 更新时间:2023-12-04 23:26:04 26 4
gpt4 key购买 nike

 $arr = array(
1, 1, 2, 3, 4
);

如何从这个数组中找出对?
请记住,数组中的对可以是任何数字 (1,2,4,3,2) 或 (3,3,1,2,4);我只是在上面随便举了一个例子。

if there is a pair in array
echo "The pair number is 1";

最佳答案

只要存在重复项,我的所有方法都会返回所需的结果。由于您的示例输入,还假设数组中只有 1 个重复项。对于您的输入大小,我的方法(以及本页上的其他答案)之间的差异最多为毫秒。因为您的用户将无法区分此页面上的任何正确方法,所以我建议您实现的方法应由“可读性”、“简单性”和/或“简洁性”决定。许多程序员总是默认使用 for/foreach/while 循环。还有一些人总是遵从函数式迭代器。您的选择可能只会归结为“您的编码风格”。

输入:

$arr=[1,1,2,3,4];

方法#1:array_count_values() , arsort() , key()

$result=array_count_values($arr);
arsort($result); // this doesn't return an array, so cannot be nested
echo key($result);
// if no duplicate, this will return the first value from the input array

解释:生成新的值出现数组,按出现次数从高到低对新数组进行排序,返回键。


方法#2:array_count_values() , array_filter() , key()

echo key(array_filter(array_count_values($arr),function($v){return $v!=1;}));
// if no duplicate, this will return null

解释:生成值出现的数组,过滤掉1的,返回唯一的键。


方法#3:array_unique() , array_diff_key() , current()

echo current(array_diff_key($arr,array_unique($arr)));
// if no duplicate, this will return false

解释:删除重复项并保留键,找到丢失的元素,返回单独的值。

阅读后进一步思考:https://www.exakat.io/avoid-array_unique/以及来自 array_unique vs array_flip 的已接受答案我有一个新的最喜欢的 2-function one-liner...

方法#4:array_count_values() , array_flip()

echo array_flip(array_count_values($arr))[2];
// if no duplicate, this will show a notice because it is trying to access a non-existent element
// you can use a suppressor '@' like this:
// echo @array_flip(array_count_values($arr))[2];
// this will return null on no duplicate

解释:计算出现次数(这使得值成为键),交换键和值(创建一个 2 元素数组),在没有函数调用的情况下访问 2 键。快速智能!

如果你想实现方法#4,你可以这样写:( demo )

$dupe=@array_flip(array_count_values($arr))[2];
if($dupe!==null){
echo "The pair number is $dupe";
}else{
echo "There were no pairs";
}

正如您从所有答案中看到的那样,有很多方法可以达到您想要的结果,但我会在这里停止。

关于php - 在数组中找到两个相等的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44160004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com