我会发帖,你好,世界
期待
HELLO,6
H
E
L
L
O
,
WORLD5
W
O
R
L
D
相反,我得到
HELLO,6
H
E
L
L
O
,
WORLD5
第二个单词不会拼写?
$name = $_POST['engname'];
$convert = array_combine($letters, $jap);
function get_num_of_names($name) {
$name = explode(" ", $name);
$name_mainlen = count($name);
for($i=0; $i <= $name_mainlen + 1; $i++) {
echo $name[$i];
$name[$i] = str_split($name[$i]);
$namelen = count($name[$i]);
echo $namelen . '<br/>';
function spellname($x, $namelen) {
for($i=0; $i <= $namelen; $i++) {
echo $x[$i] . '<br/>';
}
}
spellname($name[$i], $namelen);
}
}
get_num_of_names($name);
答案 0 :(得分:8)
你在循环中定义一个函数。如果您激活错误报告,则您的脚本会发生Function 'spellname' already defined
错误。
在遇到函数时定义函数。如果将它放在循环中,它将在每次迭代时定义。由于您无法定义具有相同名称的两个函数,因此您的脚本会因致命错误而中止。
除此之外,还有更简单的方法可以做你想做的事情:
$str = 'Hello World';
$words = explode(' ', $str);
$output = array();
foreach ($words as $word) {
$output[] = join('<br />', str_split($word));
}
echo join('<br /><br />', $output);
或者,作为一个单行:
echo join('<br /><br />', array_map(create_function('$a', 'return join("<br />", str_split($a));'), explode(' ', $str)));
或者,甚至更短的不同方法(关于@Long Ears):
echo join('<br />', str_replace(' ', '', str_split($str)));
答案 1 :(得分:4)
您将两次定义相同的函数,这会导致一个明显的错误,因此请确保error_reporting为E_ALL并且您的php.ini中的display_errors已启用。
在这种情况下,您不需要该功能,您只需循环$name
而不是$x
。
答案 2 :(得分:1)
伙计,你的for循环中有一个功能! WTF ??? 强>
如果我的一个朋友会带着这个代码来找我(那将是一个不太可能的场景),将是我会给出的回复。基本上你不应该这样做。
答案 3 :(得分:1)
除了其他评论之外,你的函数叫做get_num_of_names,但更好的叫做print_names_and_their_letters,因为获取名字的数量只是函数的一小部分。