Php 查找数组中相等的两个值
如何从该数组中找到该对?Php 查找数组中相等的两个值,php,arrays,duplicates,Php,Arrays,Duplicates,如何从该数组中找到该对? 请记住,数组中的对可以是任意数字(1,2,4,3,2)或(3,3,1,2,4);我只是随便举一个例子 $arr = array( 1, 1, 2, 3, 4 ); 首先检查数组,然后检查连续索引上是否有两个值相同的数字 这是最有效的解决方案:排序是在O(n log n)time1中完成的,而检查需要O(n)时间。总的来说,您将在O(n logn)时间内得到答案。简单的方法将使用O(n2)时间 如果不想修改原始数组,请在副本上执行上述所有操作 if the
请记住,数组中的对可以是任意数字(1,2,4,3,2)或(3,3,1,2,4);我只是随便举一个例子
$arr = array(
1, 1, 2, 3, 4
);
首先检查数组,然后检查连续索引上是否有两个值相同的数字
这是最有效的解决方案:排序是在O(n log n)time1中完成的,而检查需要O(n)时间。总的来说,您将在O(n logn)时间内得到答案。简单的方法将使用O(n2)时间
如果不想修改原始数组,请在副本上执行上述所有操作
if there is a pair in array
echo "The pair number is 1";
函数hasEqualPair($arr){
排序($arr);
$l=计数($arr);
对于($i=1;$i<$l;++$i){
如果($arr[$i]==$arr[$i-1]){
返回true;
}
}
返回false;
}
变量转储(hasEqualPair(数组(1,2,4,3,2));//真的
变量转储(hasEqualPair(数组(1,1,2,3,4));//真的
变量转储(hasEqualPair(数组(3,3,1,2,4));//真的
变量转储(hasEqualPair(数组(3,5,1,2,4));//假的
当然,如果您想知道这对是什么,只需将上述函数中的return true
更改为return$arr[$i]
。然后,您可能还需要将函数名更改为getEqualPair
1 PHP中的函数使用。可以使其始终在O(n log n)时间内运行,但PHP中的实现可能具有O(n log n)的平均运行时间,最坏情况下的运行时间仍然是O(n2)。首先对数组进行排序,然后使用foreach循环,如果current和next相等,并且在此时间之前没有回显此项,则回显项是成对的
function hasEqualPair($arr) {
sort($arr);
$l = count($arr);
for ($i = 1; $i < $l; ++$i) {
if ($arr[$i] === $arr[$i - 1]) {
return true;
}
}
return false;
}
var_dump(hasEqualPair(array(1, 2, 4, 3, 2))); // true
var_dump(hasEqualPair(array(1, 1, 2, 3, 4))); // true
var_dump(hasEqualPair(array(3, 3, 1, 2, 4))); // true
var_dump(hasEqualPair(array(3, 5, 1, 2, 4))); // false
使用内置的。然后迭代结果并检查计数是否大于1
$arr = array(
1, 3, 1, 2, 2, 2, 3, 4
);
sort($arr);
$last_number = null;
foreach($arr as $key => $item) {
if(array_key_exists($key + 1, $arr)) {
if($item === $arr[$key + 1]) {
if($last_number !== $item) {//prevent duplicate echo pair of one item
echo 'The pair number is ' . $item;
$last_number = $item;
}
}
}
}
只要有重复的,我的所有方法都将返回所需的结果。由于您的示例输入,还假定数组中只有1个重复项。对于您的输入大小,我的方法(和本页上的其他答案)之间的差异最多为毫秒。由于您的用户无法区分此页面上的任何正确方法,因此我建议您实现的方法应根据“可读性”、“简单性”和/或“简洁性”确定。有许多程序员总是默认使用for/foreach/while循环。还有一些人总是遵从函数迭代器。您的选择可能会归结为“您的编码风格” 输入:
$arr = array(
1, 1, 2, 3, 4
);
$values = array_count_values($arr);
foreach ($values as $key => $value) {
if ($value > 1) {
echo 'Pair: ' . $key;
// break, if you need to show first pair only
// break;
}
}
方法#1:
说明:生成值引用的新数组,按引用从高到低排序新数组,返回键
方法#2: 说明:生成值出现的数组,过滤掉
1
,返回单键
方法#3: 说明:删除重复项并保留键,查找丢失的元素,返回唯一值 阅读后的进一步思考:我最喜欢的两功能一行程序的答案是 方法4: 说明:统计出现次数(生成值的键),交换键和值(创建2元素数组),无需函数调用即可访问
2
键。快聪明
如果您想实现方法4,可以编写如下内容:()
从所有答案中可以看出,有很多方法可以实现您想要的结果,但我就到此为止。您可以首先计算数组中的所有值,然后针对每个不同的值检查是否在数组中出现两次
$dupe=@array_flip(array_count_values($arr))[2];
if($dupe!==null){
echo "The pair number is $dupe";
}else{
echo "There were no pairs";
}
$arr=array(
1, 1, 2, 3, 4
);
回声“;
$VAL=数组计数值($arr);
foreach($VAL作为$key=>$value){
如果($value%2==0){
echo“配对号为“$key”。
”;
}否则{
echo“非对编号为“$key”。
”;
}
}
这是数组\u计数\u值
可能有多对吗?你要全部的还是第一双?总会有一对吗?@mickmackusa只有一对。
$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
echo key(array_filter(array_count_values($arr),function($v){return $v!=1;}));
// if no duplicate, this will return null
echo current(array_diff_key($arr,array_unique($arr)));
// if no duplicate, this will return false
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
$dupe=@array_flip(array_count_values($arr))[2];
if($dupe!==null){
echo "The pair number is $dupe";
}else{
echo "There were no pairs";
}
<?php
$array = array(1, 1, 2, 3, 4);
$vars = array_count_values($array);
foreach($vars as $key => $var) {
if($var == 2) {
echo "The pair number is " . $key . "<br>";
}
}
?>
$arr = array(
1, 1, 2, 3, 4
);
echo "<pre>";
$vals = array_count_values($arr);
foreach ($vals as $key => $value) {
if($value%2==0){
echo "The pair number is ".$key."<br>";
}else{
echo "The not pair number is ".$key."<br>";
}
}