【问题标题】:Max function in PHP fails on strings?PHP中的Max函数在字符串上失败?
【发布时间】:2015-05-08 19:19:02
【问题描述】:

鉴于此 list.txt 文件:

9
10
19

你猜怎么着?

max(split("\n",$file_handle)) gives me 9

max(explode(PHP_EOL,$file_handle)) gives me 9

现在,在一个字符串上:

$string = "9 10 19"; max(split("\n",$string)) gives me 19

更新:从文件中读取时,我得到字符串,而 max() 在比较字符串值时似乎找不到正确的最大值?! 9 大于 10。字符串上的相同文件内容可以正常工作。 file_get_contents()/fread() 同样的问题。

【问题讨论】:

  • 你上面提到的 90 是我对字符串比较的期望,因为它从第一个字符开始,并且 9 大于 100 中的第一个。我不确定用 PHP 做的最好方法,但你可能想要这样的东西:stackoverflow.com/questions/9593765/…
  • 工作正常:3v4l.org/qgnnZ。从文件读取有问题。
  • 是的,sectus,这就是问题所在。从文件中读取时,它被解释为“字符串”,因此 9 大于 10。我想知道为什么?
  • 不,max 适用于数字字符串。显示你的阅读情况。
  • 似乎没有......当我转换为数字时,它可以成功找到正确的最大值。

标签: php


【解决方案1】:

您确定 EOL(行尾)是“\n”吗?

看看这个答案:

Explode PHP string by new line

并检查此以了解 EOL 说明:

Difference between \n and \r?

【讨论】:

  • 确实是这个问题!文件中使用的 dos 结束行字符不知何故导致 PHP 默认将其解释为字符串而不是整数。我将 list.txt 文件转换为使用 unix 换行符而不是 dos 换行符,现在脚本按预期工作。
【解决方案2】:

这样就解决了。对我来说仍然是个谜,为什么值来自文件的字符串和来自具有相同内容的字符串的数字。无论如何,这是修复:

max(array_map('intval', split("\n",$file_handle)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多