【问题标题】:Can't extract variables from Foreach loop无法从 Foreach 循环中提取变量
【发布时间】:2014-11-06 19:55:28
【问题描述】:

我有一个现有数组,我想从单个全名字段中分别提取名字和姓氏,并将每个数组放入自己的变量中。我已经按照我需要的方式进行提取,但是一旦退出“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;

有什么想法吗?

【问题讨论】:

  • 您是否尝试过 echo $firstName $lastname 在循环中和之后?也许它会给你一些想法?并且更深入 - var_dump 这些值都在循环中和之后。
  • 是的,我做到了。循环后什么也没显示。 “修复”是在循环中包含 if 语句。

标签: php arrays foreach


【解决方案1】:

您没有检查您的正则表达式是否匹配,因此对于不匹配的数组元素,您将 $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;

【讨论】:

    【解决方案2】:

    您需要将要返回的变量包装在“if”语句中,否则这些值会被后续循环覆盖:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      相关资源
      最近更新 更多