PHP中循环生成a-z数组出现异常行为的原因是什么?
PHP中字母循环出现多余元素的原因
这是PHP字符串自增和字符串比较的特性导致的:
字符串自增规则:
PHP里对单个字母执行++操作时,会按字母表顺序递增,到z之后,会自动变成aa,后续继续递增就是ab、ac…az→ba…以此类推,和Excel的列命名逻辑一致。字符串比较逻辑:
当用<= 'z'做判断时,字符串比较是逐字符按ASCII码值对比。比如'aa'和'z'比较时,第一个字符'a'的ASCII码(97)小于'z'的ASCII码(122),所以'aa' <= 'z'会返回true,循环会继续执行,不会在z之后停止,直到脚本超时或手动终止。
而第一个循环用$i < 'z'时,当$i递增到z,'z' < 'z'不成立,循环直接终止,所以只会得到a到y的数组。
正确生成a-z数组的方法
如果要生成包含a到z的数组,更简单可靠的方式是用PHP内置的range()函数:
$array_letters = range('a', 'z'); print_r($array_letters);
也可以用ASCII码来控制循环,避免字符串比较的问题:
$array_letters = []; // ord('a')获取a的ASCII码97,ord('z')是122 for ($i = ord('a'); $i <= ord('z'); $i++) { $array_letters[] = chr($i); // 将ASCII码转回字符 } print_r($array_letters);
内容的提问来源于stack exchange,提问作者Brando Jeanpier
相关产品推荐
相关产品推荐

