Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取单个数组中的公共值数_Php_Arrays - Fatal编程技术网

Php 获取单个数组中的公共值数

Php 获取单个数组中的公共值数,php,arrays,Php,Arrays,我想从一个数组中获取公共数量的值。请检查以下数组 array(111) { [0]=> int(1807) [1]=> int(3013) [2]=> int(2989) [3]=> int(1815) [4]=> int(2993) [5]=> int(1807) [6]=> int(2999) [7]=> int(3003) [8]=> int(1815) [9]=> int(3009)

我想从一个数组中获取公共数量的值。请检查以下数组

array(111) {
  [0]=> int(1807)
  [1]=> int(3013)
  [2]=> int(2989)
  [3]=> int(1815)
  [4]=> int(2993)
  [5]=> int(1807)
  [6]=> int(2999)
  [7]=> int(3003)
  [8]=> int(1815)
  [9]=> int(3009)
  [10]=> int(3013)
}
如您所见,以下是常见项目:

  • 0和5
  • 1和10
  • 3和8
我需要如下输出:

array(1807, 3013, 1815)

需要明确的是,它在这里不起作用,因为它会从数组中删除重复项。我不想删除重复项,我想删除非重复项。

我不确定,如果使用php内置数组函数可以更轻松地完成这项工作,但是使用两个临时数组变量的简单for循环就可以完成这项工作

$array = [1,1,2,3,4,4];
$t = [];
$double = [];
foreach ($array as $item) {
    if (isset($t[$item])) {
        $double[$item] = true;
    }
    $t[$item] = true;
}
$values = array_keys($double);
再次考虑了没有显式循环的其他解决方案,并使用
array\u reduce

$array = [1,1,2,3,4,4];
$values = [];
sort($array);
array_reduce($array, function($last, $current) use (&$values) {
    return $last == $current ? $values[$current] = $current : $current;
}, false);

print_r($values);

我不确定,使用php内置数组函数是否可以更容易地实现这一点,但是一个带有两个临时数组变量的简单for循环就可以完成这项工作

$array = [1,1,2,3,4,4];
$t = [];
$double = [];
foreach ($array as $item) {
    if (isset($t[$item])) {
        $double[$item] = true;
    }
    $t[$item] = true;
}
$values = array_keys($double);
再次考虑了没有显式循环的其他解决方案,并使用
array\u reduce

$array = [1,1,2,3,4,4];
$values = [];
sort($array);
array_reduce($array, function($last, $current) use (&$values) {
    return $last == $current ? $values[$current] = $current : $current;
}, false);

print_r($values);
请尝试以下操作:

$arr = array(
    1807,
    3013,
    2989,
    1815,
    2993,
    1807,
    2999,
    3003,
    1815,
    3009,
    3013,
);

$arr2 = $arr;

$recurring = [];

foreach($arr2 as $key => $value)
{
    unset($arr2[$key]);
    if(in_array($value, $arr2) && !in_array($value, $recurring))
    {
        $recurring[] = $value;
    }
}

var_dump($recurring);
这将为您提供
$recurtive
变量内部的所有定期值。但是请确保不要在循环中迭代主数组,而是像
$arr2=$arr

请尝试以下操作:

$arr = array(
    1807,
    3013,
    2989,
    1815,
    2993,
    1807,
    2999,
    3003,
    1815,
    3009,
    3013,
);

$arr2 = $arr;

$recurring = [];

foreach($arr2 as $key => $value)
{
    unset($arr2[$key]);
    if(in_array($value, $arr2) && !in_array($value, $recurring))
    {
        $recurring[] = $value;
    }
}

var_dump($recurring);

这将为您提供
$recurtive
变量内部的所有定期值。但是请确保不要在循环中迭代主数组,而是像
$arr2=$arr

您需要的只是副本

试试这个:

$duplicates= array();
foreach(array_count_values($arr) as $val => $c)
    if($c > 1) $duplicates[] = $val;
return $duplicates;

你想要的只是复制品

试试这个:

$duplicates= array();
foreach(array_count_values($arr) as $val => $c)
    if($c > 1) $duplicates[] = $val;
return $duplicates;

您可以简单地使用
array\u unique
array\u diff\u assoc
功能。这里有一个例子

$array = [1,2,3,1,2];
$unique_array = array_unique($array);
$array = array_diff_assoc($array, $unique_array);
$array = $array_unique($array);
print_r($array);
输出:

Array ( [3] => 1 [4] => 2 ) 

您可以简单地使用
array\u unique
array\u diff\u assoc
功能。这里有一个例子

$array = [1,2,3,1,2];
$unique_array = array_unique($array);
$array = array_diff_assoc($array, $unique_array);
$array = $array_unique($array);
print_r($array);
输出:

Array ( [3] => 1 [4] => 2 ) 

您的意思是,重复编号?可能重复@mega6382是,这是常见的。@LearningROR否将从数组中删除重复值。@ZainHail如果提供的任何解决方案有效,请接受它。您的意思是,重复编号?可能重复@mega6382是,这是常见的解决方案。@LearningROR No,它将从数组中删除重复的值。@ZainShail如果提供的任何解决方案有效,请接受它。它可以处理2个重复的值。但不适用于3个副本。它适用于2个副本。但不适用于3个重复数。在差异之后需要一个额外的数组_unique,否则同一项将有多个值,请尝试:[1807、1、222、222、3013、2989、1807、1807、2989、3012]在差异之后需要一个额外的数组_unique,否则同一项将有多个值,请尝试:[1807, 1 , 222, 222, 3013, 2989, 1807, 1807, 2989, 3012]