2014-04-17 61 views
0

我有一個代碼可以將姓氏和名字分開,我在一個可以有十個名字的窗體上使用它。現在我簡單地複製了代碼多次,手動更新數字,但數字必須有一種方法來循環這個函數。在PHP中增加多個變量For循環

的基本代碼是:

if (!empty($_POST['name2'])) { 
    $name2 = ucwords(strtolower($_POST['name2'])); 
    $parser = new HumanNameParser_Parser($name2); 
    $fname2 = $parser->getFirst(); 
    $lname2 = $parser->getLast(); 
} 

由於FNAME和LNAME變量用於其他地方,我需要堅持使用的命名。

我想用一個For:

for ($i=2; $i <= 6; $i++) 
{ 
    if (!empty($_POST['name($i)'])) { 
     $name($i) = ucwords(strtolower($_POST['name($i)'])); 
     $parser = new HumanNameParser_Parser($name($i)); 
     $fname($i) = $parser->getFirst(); 
     $lname($i) = $parser->getLast(); 
    } 
    else 
    { 
     break; 
    } 
} 

,但我有一個艱難的時間搞清楚什麼我其實應該在我的例子中使用的(I $)。我嘗試過。$ i和[$ i],但不斷收到錯誤。不知道我應該在$ _POST中編碼的方式與變量$ name不同。

回答

1

你可以使用$_POST['name' . $i]和名字變量,你可以只是${'name' . $i};

取代它所以這將是這樣

for ($i=2; $i <= 6; $i++) 
{ 
if (!empty($_POST['name' . $i])) { 
    ${'name' . $i} = ucwords(strtolower($_POST['name' . $i])); 
    $parser = new HumanNameParser_Parser(${'name' . $i}); 
    ${'fname' . $i} = $parser->getFirst(); 
    ${'lname' . $i} = $parser->getLast(); 
    } 
else 
    { 
    break; 
    } 
} 
+0

謝謝,這工作完美。 – Tom

0

難道你試試這個?:

for ($i=2; $i <= 6; $i++) 
{ 
if (!empty($_POST["name$i"])) { 
    $name[$i] = ucwords(strtolower($_POST["name$i"])); 
    $parser = new HumanNameParser_Parser($name[$i]); 
    $fname[$i] = $parser->getFirst(); 
    $lname[$i] = $parser->getLast(); 
    } 
else 
    { 
    break; 
    } 
} 
+0

感謝$ _ POST變量。出於某種原因,nameparser使用這種方式拋出致命的錯誤來定義變量。 – Tom

0

您可以使用$_POST['name'.$i]獲得該指數。我建議是這樣的:

$people = array(); 
for($i=2; $i<=6; $i++) { 
    if(empty($_POST['name'.$i])) continue; 
    $name = ucwords(strtolower($_POST['name'.$i])); 
    $parser = new HumanNameParser_Parser($name); 
    $people[$i] = array("first"=>$parser->getFirst(),"last"=>$parser->getLast()); 
} 

這將導致$people陣列,這比可變的變量更實用。

0

是這樣的嗎?

$name = array(); 
$fname = array(); 
$lname = array(); 
for ($i=2; $i <= 6; $i++) 
{ 
    if (!empty($_POST['name_'.$i])) { 
     $name[$i] = ucwords(strtolower($_POST['name_'.$i])); 
     $parser = new HumanNameParser_Parser($name[$i]); 
     $fname[$i] = $parser->getFirst(); 
     $lname[$i] = $parser->getLast(); 
    } 
    else 
    { 
     break; 
    } 
}