我是 PHP 新手,我正在做一些非常简单的应用程序(测试)。 我有一个包含以下代码的表格:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["val1"])) {
$err_val1 = "Error";
} else {
$val1 = test_input($_POST["val1"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
<div class='col-lg-1 center'>
<label>1</label>
<input type='text' class='form-control' name='val1'>
<span class='error'><?php echo (!empty($err_val1)) ? 'Error' : '';?></span>
</div>
有没有办法使用 for(或 foreach)循环?因为有 139 个“val”,我想优化代码,避免同一部分重复 139 次。
是的,有一个办法:
for ($i = 1; $i <= 139; $i++) {
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["val" . $i])) {
extract([("err_val" . $i) => "Error"]);
} else {
extract(("val" . $i) => test_input($_POST["val" . $i]));
}
}
}
上面未经测试的代码的目的是,如果对应的值为空,则创建 err_val(如 err_val123);如果对应的值不为空,则创建 val(如 val123)。
extract
获取键值对的关联数组,并将键提取到具有相同名称和分配给它们的值的变量中。也许我犯了一些错别字,如果这不起作用,请告诉我。
但是这段代码可读性不是很好,为什么我们不使用数组来代替呢?
$vals = [];
$errors = [];
for ($i = 1; $i < 139; $i++) {
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["val" . $i])) {
$errors[$i] = "Error";
} else {
$values[$i] = test_input($_POST["val" . $i]);
}
}
}