如何用PHP输出26个英文字母组成的所有5位字符串?

逛v2的时候看到一个帖子:点击这里 各个码农都在秀自家的语言,身为php程序员,也尝试着写了一个,没想到这么一个简单的问题也踩了不少的坑.

<?php
$arr=array("a","b",'c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
	$num=array(0,0,0,0,0);
	$out='';
	while($num[4]<=25){
		$out.=$arr[$num[0]].$arr[$num[1]].$arr[$num[2]].$arr[$num[3]].$arr[$num[4]].',';
		$num[0]++;
		if($num[0]>25){
			$num[0]=0;
			$num[1]++;
		}
		if($num[1]>25){
			$num[1]=0;
			$num[2]++;
		}
		if($num[2]>25){
			$num[2]=0;
			$num[3]++;
		}
		if($num[3]>25){
			$num[3]=0;
			$num[4]++;
		}
	}
	file_put_contents("d:/num.txt", $out);

虽然结果是正确的,但是这滑稽的判断连我自己都看不下去了.幸好另一位php前辈写了如下这个:

    <?php
    for($i='aaaaa';$i<'zzzzz';$i++){
        echo $i.',';
    }

好吧,PHP中字符串之间也可以比大小这是知道的,但是加减的规则是怎样的呢?

比较大小

这个很简单,php手册上写的很清楚:

$a='aaaaa';$b='z';
echo $b>$a?"yes":"no";//输出'yes'

字符串的自增(只限英文字母)

stackoveflow上有关于这个的讨论:[点击这里](http://stackoverflow.com/questions/4098345/why- doesnt-this-code-simply-print-letters-a-to-z) 帖子里面讨论的很详细,php关于字母的加减的规则没有沿袭C语言,而是模仿perl,”z”++ 并不是等于”[“(C语言是这样),而是等于”aa”.

$str1="a";
echo ++$str1;//"b"
$str2="z";
echo ++$str2;//"aa"
$str2="z";
echo --$str2;//"z"

注意只能自增,自减无效果.并且:

$str="a";
$a=++$str;
$b=$str+1;
echo $a;//"b"
echo $b;// 1

字符串与数字加减,依然走php关于这方面的规定.

所以,如何用php方便的输出a-z?

    for($i="a";$i<"z";$i++){
        echo $i."<br>";
    }

以上

Comments

comments powered by Disqus