我有一个现有的数组,我想从一个全名字段中单独提取名字和姓氏,并将每个名称和数字放入自己的变量中。我已经将提取工作按照我需要的方式工作了,但是一旦我从'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;
有什么想法吗?
答案 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;