php max()函数给出了错误的结果

时间:2015-12-02 15:32:02

标签: php max

我试图使用php找到文件中每行的最大值。我的输入看起来像这样。

1x5x10
1x10x5
5x1x10
5x10x1
10x1x5
10x5x1

我的代码:

<?php

$myfile = fopen("day2_input.txt", "r") or die("Unable to open file!");

while(!feof($myfile)) {
    $line = fgets($myfile);

    $lineArr = explode("x", $line);

    echo(max($lineArr)."\n");
}

fclose($myfile);

?>

这是奇怪的事情。正如您在输入中看到的那样,每行的最大值为10,但这是我的输出:

5
5

5
10
5

10

在末尾包括一个空行。两个问题。为什么max() - 函数给出的不是10?为什么输出中的空行?行末尾的输入文件中没有空格。我还使用print_r()上的$lineArr检查了数组,它给出了:

Array
(
    [0] => 1
    [1] => 5
    [2] => 10

)
Array
(
    [0] => 1
    [1] => 10
    [2] => 5

)
Array
(
    [0] => 5
    [1] => 1
    [2] => 10

)
Array
(
    [0] => 5
    [1] => 10
    [2] => 1

)
Array
(
    [0] => 10
    [1] => 1
    [2] => 5

)
Array
(
    [0] => 10
    [1] => 5
    [2] => 1
)

3 个答案:

答案 0 :(得分:4)

它们被转换为字符串,并且正在以字母数字形式进行比较。执行var_dump($ lineArr)而不是print_r($ lineArr)来确认这一点:

http://php.net/manual/en/function.max.php

&#34;多个字符串值将按字母数字比较&#34;

使用:

$lineArr = array_map('intval', explode('x', $line));

答案 1 :(得分:3)

你的爆炸是创建一个字符串数组,而不是整数....所以max应用字符串比较逻辑,10按字母顺序小于5

将您的字符串元素转换为整数,然后执行max()调用....类似于:

$lineArr = array_map('intval', explode("x", $line));

答案 2 :(得分:0)

正如您在$lineArr的输出中所看到的,每个爆炸结果的第三个元素中都有一个换行符。您必须在爆炸前修剪源行中的换行符,如下所示:

$line = fgets($myfile);
$line = trim($line, " \t\r\n"); // this string to be added

它会像你期望的那样正常工作。