我有一个像0001到6500这样的数组中的数字,有一些缺失的数字,我想知道哪些缺失但是我无法使用前导零。
foreach($newFiles as $file) {
$justNumbers[] = substr("$file",0, 4);
}
$arr2 = range(0001,max($justNumbers));
$missing = array_diff($arr2,$justNumbers);
print_r($missing);
最好的方法是什么?
答案 0 :(得分:2)
我会遍历一个范围,然后通过字符串填充匹配文件名:
foreach($newFiles as $file) {
$justNumbers[] = substr("$file",0, 4);
}
foreach(range(1, max($justNumbers)) as $i){
$padded = str_pad($i, 4, '0', STR_PAD_LEFT);
if( !in_array($padded, $justNumbers) ){
$missing[] = $padded;
}
}
print_r($missing);
修改强>
仅出于学术原因,我认为您仍然可以使用array_diff
来获得相同的结果(即遵循原始代码模式而不是第二个foreach
循环):
$arr2 = range(1, max($justNumbers));
$padded_arr2 = array_map( function($i){ return str_pad($i, 4, '0', STR_PAD_LEFT); }, $arr2 );
$missing = array_diff($padded_arr2, $justNumbers);
print_r($missing);