PHP数组(3,5,6,7,8,11)我们怎么知道缺失值是1,2,4,9,10

时间:2011-02-05 06:58:30

标签: 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-。

我不需要用缺少的值填充我的数组,我只想知道谁缺少

3 个答案:

答案 0 :(得分:22)

这是一个很好的单线:

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

答案 1 :(得分:4)

$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

答案 2 :(得分:2)

一个定义不明确的问题,但我会咬人。

为什么不抓取数组中的最低(min())和最高(max())值,然后在for循环中遍历数组,将缺失值添加到第二个数组中,因为它们是发现?

第二个想法,有一个更好的方法:你可以预加载第二个数组using range(),从第一个和最后一个索引传入低/高值,然后使用array_diff_key()找到丢失的值。

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