[英]Can't extract variables from Foreach loop
我有一個現有的數組,我想從一個全名字段中單獨提取名字和姓氏,並將每個名稱和數字放入自己的變量中。 我已經將提取工作按照我需要的方式工作,但是一旦我離開'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;
有任何想法嗎?
您沒有檢查正則表達式是否匹配,因此對於與您不匹配的數組元素,您將$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;
您需要在“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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.