php的范围函数行为

时间:2010-10-01 21:22:34

标签: php

PHP.net关于range函数的文档有点缺乏。给定字符范围时,这些函数会产生意外的(对我而言)结果。

$m = range('A','z'); print_r($m); $m = range('~','"'); print_r($m);

我正在寻找可能明确定义其行为的引用。

3 个答案:

答案 0 :(得分:4)

问题是范围将其参数视为整数,如果给它一个字符,它会将其转换为ASCII字符代码。

在第一种情况下,您将获得字符'A'(整数65)和字符'z'(整数122)之间的所有字符。对于我们这些来自C(或类C语言)背景的人来说,这是预期的行为。

这是少数几种情况,其中PHP将单个字符转换为ASCII代码,而不是像正常情况一样将字符串解析为整数。大多数PHP文档都更好地告诉您何时会发生这种情况。例如strpos,注意:

  

<强>针

     
    

如果needle不是字符串,则将其转换为整数并应用为字符的序数值。

  

range的文档对此非常安静。

答案 1 :(得分:0)

考虑:

foreach (range('A','z') as $c)
  echo $c."\n";

相当于:

for ($i = ord('A'); $i <= ord('z'); ++$i)
  echo chr($i)."\n";

同样,您的第二个示例相当于(自ord('~')&gt; ord('"')):

for ($i = ord('~'); $i >= ord('"'); --$i)
  echo chr($i)."\n";

没有详细记录,但这就是它应该如何运作。

答案 2 :(得分:0)

这是因为“是比'尝试

更低的字符

m =范围('A','z');的print_r($米);

$ m = range('z','A');的print_r($米);

字符由其chr(ASCII表)值拉取:

http://www.asciitable.com/

以2个参数的方向顺序返回数组。