PHP数组(3,5,6,7,8,11)我们如何知道缺少的值是1,2,4,9,10

PHP数组(3,5,6,7,8,11)我们如何知道缺少的值是1,2,4,9,10,php,Php,我得到了这样一个数组$ids=array(3,7,6,5,1,8,11)。我们如何知道缺失值是2,4,9,10 我期望$ids的值为1,2,3,4,5,6,7,8,9,10,11,顺序不重要,它可能是3,5,6,1,2,4,8,9,10,11 我不需要用缺少的值填充数组,我只想知道缺少了谁,这是一个定义不清的问题,但我会咬一口 为什么不获取数组中的最低(min())和最高(max())值,然后在for循环中遍历数组,在找到缺少的值时将其添加到第二个数组中 仔细想想,还有一种更好的方法:可以使用r

我得到了这样一个数组$ids=array(3,7,6,5,1,8,11)。我们如何知道缺失值是2,4,9,10

我期望$ids的值为1,2,3,4,5,6,7,8,9,10,11,顺序不重要,它可能是3,5,6,1,2,4,8,9,10,11


我不需要用缺少的值填充数组,我只想知道缺少了谁,这是一个定义不清的问题,但我会咬一口

为什么不获取数组中的最低(
min()
)和最高(
max()
)值,然后在for循环中遍历数组,在找到缺少的值时将其添加到第二个数组中

仔细想想,还有一种更好的方法:可以使用range()预加载第二个数组
,传入第一个和最后一个索引的低/高值,然后使用
array\u diff\u key()
查找缺少的值

这都是假设我正确理解了您的问题,您只想使用已定义的数组来定义边界来填充缺少的值。

$numbers=array(3,5,6,7,8,11);
$numbers = array(3,5,6,7,8,11);

$missing = array();
for ($i = 1; $i < max($numbers); $i++) {
    if (!in_array($i, $numbers)) $missing[] = $i;
}

print_r($missing); //1,4,9,10
$missing=array(); 对于($i=1;$i
这里有一句漂亮的话:

$ids = array(3,5,6,7,8,11);
$missing = array_diff(range(1, max($ids)), $ids);

为什么12不是一个缺失的值?0呢-1?缺失值为2,4,9,10缺失值中没有0和-1以及12。您不需要排序,您可以使用
max
min
来获取array@Dan这是我在凌晨3点应该上床睡觉的时候叠东西得到的。我来这里只是想找点事,但不知怎么的,我被追上了。我将编辑我的答案。谢谢。我必须再次检查PHP是否有一个函数来获取数组的
max
min
。@Dan:当然有!我很确定PHP也有一个
kitchen\u sink()
函数……唉,我甚至没有想到要像那样动态创建range数组(见我的答案)。。。就这样,我现在肯定要睡觉了。@Petah:是的,但第一行是对问题代码的重述。第二行是解决方案:-P饶了我吧!我只是想补充一点,这个答案帮我省去了很多麻烦。我有一个高达100000的数字列表,需要一个未使用的数字列表。按照惯常的方法,数完这些数字需要190秒。。。尝试了
array_diff
,就像在这个答案中一样,花了2秒钟:-)谢谢!
$ids = array(3,7,6,5,1,8,11);
//var_dump(max($array));
$arr        = range(1,max($ids));
$missing    =   array_diff($arr,$ids);
var_dump($missing);