2014-11-06 139 views
1

我有一個現有的數組,我想從單個全名字段中分別提取名字和姓氏,並將每個字段都放入自己的變量中。我已經提取出了我需要的方式,但是當我離開'foreach'循環後,我似乎無法檢索數據。無法從Foreach循環提取變量

我的陣列是這樣的..

Array 
(
    [0] => 2 
    [1] => dduck 
    [2] => Donald Duck 
    [3] => [email protected] 
) 

當我運行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

您是否在循環中和之後嘗試過echo $ $ $ name?$ lastname?也許它會給你一些想法?並深入 - 'var_dump'這些值在循環中和之後。 – 2014-11-06 19:58:31

+0

是的,我做到了。循環後什麼也沒有顯示。 '修復'是在循環中包含一個'if'語句。 – JonDoeCA 2014-11-06 20:39:12

回答

2

您不檢查您的正則表達式是否匹配,因此對於與您不匹配的數組元素,將$firstName$lastname分配給未定義的索引。

示例數組在[3]元素上不匹配,所以這些變量在循環結束時或多或少是空的,使得循環外的回顯不顯示任何內容。

你可以嘗試(在if聲明包裝的preg_match)類似如下:

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

你需要用你特林在一個「如果」語句,否則的值返回變量被後續循環覆蓋:

$t_result = array(
    0 => 2, 
    1 => 'dduck', 
    2 => 'Donald Duck', 
    3 => '[email protected]', 
); 

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;