我试图使用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
)
答案 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
它会像你期望的那样正常工作。