php array_diff用前导零检查数字

时间:2015-11-09 13:38:25

标签: php

我有一个像0001到6500这样的数组中的数字,有一些缺失的数字,我想知道哪些缺失但是我无法使用前导零。

foreach($newFiles as $file) {
    $justNumbers[] = substr("$file",0, 4);
}

$arr2 = range(0001,max($justNumbers)); 
$missing = array_diff($arr2,$justNumbers);
print_r($missing);

最好的方法是什么?

1 个答案:

答案 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);