Foreach循环只循环一次

Bar*_*ker 0 php foreach

我试图循环所有名称$names并使用正则表达式转换它们.转换很好,但我无法找到循环遍历每个名​​称的方法.

目前,只返回一个值:"名称:COOPE,塞巴斯蒂安"

<!DOCTYPE html>
<html>
        <head>
                <title>PHP Arrays</title>
        </head>
        <body>
                <h1>PHP Arrays</h1>
<?php
        $names = array("Sebastian Coope", "Andrew Craig", "Prof Karl Tuyls", "Dr Ullrich Hustadt", "Dr Michele Zito");

            foreach($names as $name){

            function rewriteText($match){
                $firstName = $match[2];
                $surname = $match[3];
                return strtoupper($surname).', '.$firstName;
            }

            $altered =  preg_replace_callback(
                "/(Mr|Ms|Mrs|Dr|Prof)?\s*(\w+)\s+(\w+)/",
                "rewriteText",
                $name);

            echo "Name: $altered<br>\n";
            }
?>
        </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Fel*_*rte 6

致命错误:无法在第13行的/path/to/file.php中重新声明rewriteText()(之前在/path/to/file.php:13中声明)

只需在foreach循环外定义您的函数

$names = array("Sebastian Coope", "Andrew Craig", "Prof Karl Tuyls", "Dr Ullrich Hustadt", "Dr Michele Zito");

function rewriteText($match){
    $firstName = $match[2];
    $surname = $match[3];
    return strtoupper($surname).', '.$firstName;
}

foreach($names as $name) {
    $altered =  preg_replace_callback(
        "/(Mr|Ms|Mrs|Dr|Prof)?\s*(\w+)\s+(\w+)/",
        "rewriteText",
        $name);

    echo "Name: $altered<br>\n";
}
Run Code Online (Sandbox Code Playgroud)