PHP.net关于range
函数的文档有点缺乏。给定字符范围时,这些函数会产生意外的(对我而言)结果。
$m = range('A','z');
print_r($m);
$m = range('~','"');
print_r($m);
我正在寻找可能明确定义其行为的引用。
答案 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表)值拉取:
以2个参数的方向顺序返回数组。