php array_diff проверить номера с ведущими нулями

1

У меня есть числа в массиве вроде 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
    $justNumbers[] = intval( substr("$file",0, 4) );
  • 0
    $arr2 = array_map(function ($i) { return sprintf("%04d", $i); }, range(1, max($justNumbers)));
Теги:

1 ответ

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 для достижения того же результата (т. 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);
  • 0
    @Exoon: я только что добавил приложение к этому ответу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню