我有一个代码,它首先将名字与姓氏分开,我在一个最多可能有10个名字的表单上使用。现在我只是多次复制代码,手动更新数字,但是必须有一种方法来循环这个函数。
基本代码是:
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不同。
答案 0 :(得分:1)
对于$ _POST变量,您可以使用$_POST['name' . $i]
,对于name变量,您只需将其替换为${'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;
}
}
答案 1 :(得分: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;
}
}
答案 2 :(得分: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
数组,它比变量变量更有用。
答案 3 :(得分: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;
}
}