Максимальное число на PHP?

Ссылка скопирована
PHP
1 ответ

В папке есть файлы:
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');
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Максимальное число в 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); // вывод результата

$num1 = gmp_init("123456789012345678901234567890"); // инициализация числа $num2 = gmp_init("987654321098765432109876543210"); // инициализация числа $sum = gmp_add($num1, $num2); // сложение чисел echo gmp_strval($sum); // вывод результата

Этот код позволит вам работать с числами, которые значительно превышают максимальные значения для целых чисел в PHP. Просто помните, что при работе с произвольно большими числами может потребоваться больше вычислительных ресурсов, поэтому будьте осторожны при использовании таких чисел в своем коде.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно