我用PHP和Java编写了一个程序,它生成长度为2的所有可能单词。 我用过递归。 为什么程序在Java中工作而在PHP中不工作?这是相同的代码。
爪哇
package com.company;
public class Words {
public static void main(String[] args) {
generate("", 2);
}
static void generate(String prefix, int remainder) {
if (remainder == 0) {
System.out.println(prefix);
} else {
for (char c = 'A'; c <= 'Z'; c++) {
generate(prefix + c, remainder - 1);
}
}
}
}
PHP
generate('', 2);
function generate($prefix, $remainder)
{
if ($remainder == 0) {
echo "$prefix\n";
} else {
for ($c = 'A'; $c <= 'Z'; $c++) {
generate($prefix . $c, $remainder - 1);
}
}
}
答案 0 :(得分:8)
$c
在PHP中有字符串类型。与数字相比,++
运算符的工作方式不同。
PHP在处理字符变量而不是C的算术运算时遵循Perl的约定。例如,在PHP和Perl $a = 'Z'; $a++;
中将$a
变为'AA'
,而在C a = 'Z'; a++;
中将变为'['
(ASCII值为'Z '是90,'['为91)的ASCII值。请注意,字符变量可以递增但不递减,即使只支持纯ASCII字母和数字(a-z,A-Z和0-9)。递增/递减其他字符变量无效,原始字符串不变。
来源:http://php.net/manual/en/language.operators.increment.php
答案 1 :(得分:5)
从
更改循环for ($c = 'A'; $c <= 'Z'; $c++) {
到
foreach (range('A', 'Z') as $c){
============================
修改强>:
抱歉,我试图找到一份关于此的官方文件,但我不能。所以我试着解释一下
在php中,当你比较2个字符串时,系统会尝试比较第一个字符然后第二个字符.....比较运算符将在第一个不同字符出现时停止
实施例
$a = 'ABCDEZ';
$b = 'ABCEZZ';
字符串$ b大于$ a,因为$ a和$ b开头的值ABC相同,但E(字符串$ b的索引3中的值)大于D(字符串索引3中的值) $ a),他们不需要比较其他角色
在这个问题中,原始循环是
for ($c = 'A'; $c <= 'Z'; $c++) {
直到$ c =&#39; Z&#39;它之后才好,但在此之后,$ c ++将是&#39; AA&#39;当php开始比较它时,&#39; AA&#39; &LT; &#39; Z&#39;循环继续,这就是我将循环改为的原因
foreach (range('A', 'Z') as $c){
让它发挥作用
我希望您喜欢它并对我的解释感到满意,抱歉,因为我没有看到任何关于此的文档,它只是php如何工作而且我知道