我得到了一个类似这个$ 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-。
我不需要用缺少的值填充我的数组,我只想知道谁缺少
答案 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()
找到丢失的值。
这是假设我已正确理解您的问题,您只想使用已定义的数组填充缺失值来定义边界。