Функция php max возвращает минимальное значение из массива - PullRequest
0 голосов
/ 27 сентября 2018

это мой первый пост.извините, если я сделал что-то не так ...

В любом случае у меня есть файл, который получает обновления по php, и это именно так:

31\n
127\n
131\n
124\n
144\n
142\n
133\n
133\n
9\n
0\n
22\n
18\n

я сделал этот скрипт в php:

$logContents = file_get_contents("logs/mainlog.txt");
$logitemArray = explode("\n", $logContents);

echo max($logitemArray);

но это эхо 9. почему?в документации php сказано, что max () должна возвращать самое большое значение в массиве

, заранее спасибо

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Как уже говорилось в комментариях, это потому, что 9 является наибольшим лексографическим значением.Если бы он сказал 900, он все равно был бы таким же.

Это потому, что когда вы разделяете строку с помощью explode, вы получаете массив типа string.Следующий код преобразует элементы в массиве в целые числа, которые должны давать ожидаемое поведение.

$logitemArray = array_map('intval', explode("\n", $logContents));
0 голосов
/ 27 сентября 2018

explode() возвращает массив строк, поэтому они сравниваются лексикографически.Вам необходимо преобразовать их в числа, чтобы max() сравнивал их численно.

$logitemArray = array_map('intval', explode("\n", $logContents));
echo max($logitemArray);

Кстати, вы можете использовать функцию file() для чтения файла непосредственно в массив строк вместо использованияfile_get_contents() с последующим explode().

$logitemArray = array_map('intval', file("logs/mainlog.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
...