Максимальное число на PHP?
В папке есть файлы:
number_1.txt
number_30.txt
number_12.txt
Как получить максимальную цифру из названий файла?
То есть 30
Сделал вот так, но дальше не соображу:
$dir = glob('my_files/*.txt'); foreach ($dir as $file) { if(preg_match('/.(txt)/', $file)){ $file = str_replace(['number', '.txt', 'my_files'], '', $file); echo $file.'<br>'; } } |
$dir = glob('my_files/*.txt'); foreach ($dir as $file) { if(preg_match('/.(txt)/', $file)){ $file = str_replace(['number', '.txt', 'my_files'], '', $file); echo $file.'<br>'; } }
Дополнительно:
1. берем все файлы и удаляем из имени всё кроме цифр
2. находим максимальное значение в массиве через max()
$files = glob('my-files/*.txt'); $max = max( array_map( fn($val) => preg_replace('![D]+!', '', basename($val)), $files ) ); var_dump($max); |
$files = glob('my-files/*.txt'); $max = max( array_map( fn($val) => preg_replace('![D]+!', '', basename($val)), $files ) ); var_dump($max);
- Отлично, спасибо.
Но если в названии папки тоже есть цифра, то как это победить? - SimpleAlex, basename($val) решает этот вопрос так как отсекает весь путь кроме имени файла
-
echo preg_replace('![D]+!', '', '1_n_2.txt'); // 12
echo preg_replace('![D]+!', '', '1_n_2.txt'); // 12
Не совсем то что ожидалось.
- nokimaro, спасибо!
Ответы:
$dir = glob('my_files/*.txt'); $last = array_pop($dir); preg_match('/.*_(d+).txt/', $last, $matches); $max = empty($matches)? 'null': $matches[1]; echo "Max number: $max"; |
$dir = glob('my_files/*.txt'); $last = array_pop($dir); preg_match('/.*_(d+).txt/', $last, $matches); $max = empty($matches)? 'null': $matches[1]; echo "Max number: $max";
Glob уже сортирует файлы. Если в my_files лежат файлы именно с указанным форматом имени, то последний будет с максимальным числом.
Если в директории могут быть файлы с другим форматом имени (number_XXX.txt, например), можно использовать цикл как у вас. Только перебирайте массив $dir с конца - там наиболее вероятно появление искомого.
- А чтобы не перебирать неподходящие файлы исключите их ещё в glob('./*[0123456789].txt');
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Максимальное число в PHP зависит от используемой аппаратной платформы и версии PHP. В общем случае, PHP может работать с целыми числами в пределах от -2^31 до 2^31-1 на 32-битных системах и от -2^63 до 2^63-1 на 64-битных системах.
Однако, PHP также поддерживает произвольно большие числа (больше, чем максимальное значение для целых чисел), используя встроенный класс GMP (GNU Multiple Precision). Этот класс позволяет работать с числами произвольной длины, что позволяет оперировать числами гораздо большего размера, чем стандартные целые числа.
Вот пример использования класса GMP для работы с произвольно большими числами в PHP:
$num1 = gmp_init("123456789012345678901234567890"); // инициализация числа $num2 = gmp_init("987654321098765432109876543210"); // инициализация числа $sum = gmp_add($num1, $num2); // сложение чисел echo gmp_strval($sum); // вывод результата
Этот код позволит вам работать с числами, которые значительно превышают максимальные значения для целых чисел в PHP. Просто помните, что при работе с произвольно большими числами может потребоваться больше вычислительных ресурсов, поэтому будьте осторожны при использовании таких чисел в своем коде.