簡體   English   中英

無法從Foreach循環中提取變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM