У меня есть числа в массиве вроде 0001 до 6500. Есть несколько недостающих чисел, я хочу узнать, какие из них отсутствуют, но я не могу заставить его работать с ведущими нулями.
foreach($newFiles as $file) {
$justNumbers[] = substr("$file",0, 4);
}
$arr2 = range(0001,max($justNumbers));
$missing = array_diff($arr2,$justNumbers);
print_r($missing);
Какой был бы лучший способ сделать это?
Я бы перебирал диапазон, а затем сопоставлял его с именем файла путем заполнения строки:
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
для достижения того же результата (т. 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);
$justNumbers[] = intval( substr("$file",0, 4) );
$arr2 = array_map(function ($i) { return sprintf("%04d", $i); }, range(1, max($justNumbers)));