Php for循环数组不起作用

时间:2011-03-04 00:47:16

标签: php arrays for-loop

我会发帖,你好,世界

期待

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);

4 个答案:

答案 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,因为获取名字的数量只是函数的一小部分。