我有一个区分名字和姓氏的代码,我在一个最多可以有十个名字的表单上使用它。现在,我只是简单地多次复制代码,手动更新数字,但我认为必须有一种方法来循环这个函数。
基本代码是:
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不同。
对于$_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;
}
}
你能试试这个吗?:
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;
}
}
您可以使用$_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
数组,它比变量更可用。
类似的东西?
$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;
}
}