无法从Foreach循环中提取变量

时间:2014-11-06 19:55:28

标签: php arrays foreach

我有一个现有的数组,我想从一个全名字段中单独提取名字和姓氏,并将每个名称和数字放入自己的变量中。我已经将提取工作按照我需要的方式工作了,但是一旦我从'foreach'中解脱出来,我似乎无法检索数据。循环。

我的阵列就是这个......

Array
(
    [0] => 2
    [1] => dduck
    [2] => Donald Duck
    [3] => donald@domain.com
)

当我运行foreach循环(下面)时,回声起作用。但是如果我在循环之外回显$ firstName和$ lastName,则不会显示任何内容....

显示名字和姓氏

foreach ($t_result as $name)
{
    preg_match('#^(\w+\.)?\s*([\'\’\w]+)\s+([\'\’\w]+)\s*(\w+\.?)?$#', $name, $results);
    $firstName = $results[2];
    $lastname = $results[3];
    echo $firstName . " " . $lastname;
}

这不显示任何内容

foreach ($t_result as $name)
{
    preg_match('#^(\w+\.)?\s*([\'\’\w]+)\s+([\'\’\w]+)\s*(\w+\.?)?$#', $name, $results);
    $firstName = $results[2];
    $lastname = $results[3];
}
echo $firstName . " " . $lastname;

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您没有检查正则表达式是否匹配,因此对于与您不匹配的数组元素,您将$firstName$lastname分配给未定义的索引。

示例数组在元素[3]上不匹配,因此这些变量在循环结束时或多或少为空,使得循环外的回显不显示任何内容。

您可以尝试以下内容(将preg_match包含在if语句中):

foreach ($t_result as $name)
{
    if (preg_match("#^(\w+\.)?\s*(['\’\w]+)\s+(['\’\w]+)\s*(\w+\.?)?$#", $name, $results)) {
       $firstName = $results[2];
       $lastname = $results[3];
    }
}
echo $firstName . " " . $lastname;

答案 1 :(得分:1)

你需要包含你想要返回的变量,如果'语句,否则后续循环会覆盖这些值:

$t_result = array(
    0 => 2,
    1 => 'dduck',
    2 => 'Donald Duck',
    3 => 'donald@domain.com',
);

foreach ( $t_result as $name ) {
    if ( preg_match( '#^(\w+\.)?\s*([\'\’\w]+)\s+([\'\’\w]+)\s*(\w+\.?)?$#', $name, $results ) ) {
        $firstName = $results[2];
        $lastname = $results[3];
    }
}

echo $firstName . " " . $lastname;