如何使用 isset 值缩短我的代码
How can I shorten my code with isset values
我很迷茫。谁能解释我如何缩短这段代码。我有几百个!我提交了一个带有输入值的表单。每当我不填写值时,我都会收到错误消息。所以我制作了这些 isset 块以防止返回错误。但我看起来很没效率!请帮忙...谢谢
if(isset($_POST['input74'])){
$value74 = $_POST['input74'];
}else{
$value74 = "";#default value
}
if(isset($_POST['input75'])){
$value75 = $_POST['input75'];
}else{
$value75 = "";#default value
}
if(isset($_POST['input76'])){
$value76 = $_POST['input76'];
}else{
$value76 = "";#default value
PHP 支持表单中的数组。您可以使用索引命名您的表单字段,例如<input type="text" name="input[74]" ... />
。然后在 PHP 中,您可以使用 for
或 foreach
循环访问它们,因为它们将作为数组提供(即您将拥有 $_POST["input"][74]
)。你可以这样写:
$values = $_POST["input"];
for ($i = 0; $i < MAX_INPUTS; $i++) {
if (!isset($values[$i])) {
$values[$i] = ""; // default value
}
}
如果由于某种原因你不能改变 HTML 端,你仍然可以使用循环动态创建字段名称并将数据复制到 PHP 端的数组,类似于:
$value = array();
for ($i = 0; $i < MAX_INPUTS; $i++) {
$name = sprintf("input%d", $i);
if (isset($_POST[$name])) {
$value[$i] = $_POST[$name];
} else {
$value[$i] = ""; // default
}
}
在这两个建议的解决方案中,您只有几行代码,而不是几乎相同行的数十次重复。在这两个示例中,我假设您的字段以 input0
开头,并且总共有 MAX_INPUTS
个字段。如果不是所有字段都存在(例如,您只有 input1、intput2、input74 和 input75),您可以创建一个包含字段编号的数组:
$field_list = array(1,2,74,75);
然后使用它来检查您的数据(这里是 HTML 字段名称中包含数组的示例):
$values = $_POST["input"];
foreach ($field_list as $num) {
if (!isset($values[$num])) {
$values[$num] = ""; // default value
}
}
您可以将 isset
包装在这样的函数中
function myIsset(&$variable, $default = "")
{
if(isset($variable))
{
return $variable;
}
else
{
return $default;
}
}
然后你就可以这样称呼它 $value74 = myIsset($_POST['input74']);
第二个参数默认为空字符串,因此如果您想设置默认值,您可以提供它或更改函数头中的默认值(如果它们都相同)。下面是显示代码工作的屏幕截图
虽然是的,但您仍将每 $_POST
一行,至少您将 5 行代码与 1 行代码和上面的函数交换。您可以将其简化为一个循环,就像我在 this answer 中解释的那样,但是在没有看到表格并确认任何模式的情况下,我无法为此提供任何代码示例,因为您所展示的可能只是巧合
使用三元来缩短代码:
$value74 = isset($_POST['input74']) ? $_POST['input74'] : 'Default value';
$value75 = isset($_POST['input75']) ? $_POST['input75'] : 'Default value';
$value76 = isset($_POST['input76']) ? $_POST['input76'] : 'Default value';
或者您也可以遍历 $_POST 数组,但必须完成一些 filtering/validation。快速想法:
if(!empty($_POST)) {
$i = 0;
$arr = array();
foreach($_POST as $input) {
$arr[$i] = $input;
$i++;
}
}
$arr
然后会产生一个像
这样的数组
Array
(
[74] => 'value74'
[75] => 'value75'
[76] => 'value76'
)
你可以使用 array_merge
.
您将使用提供的所有默认输入值设置默认数组。
$aryDefault = ['input74'=>'', 'input75'=>'',...]
然后 array_merge
使用您的 post 数组,它将填充所有缺失值。注意:顺序很重要 check out the docs。
If the input arrays have the same string keys, then the later value
for that key will overwrite the previous one. If, however, the arrays
contain numeric keys, the later value will not overwrite the original
value, but will be appended.
使用 array_merge($aryDefault, $_POST)
以便 $_POST
覆盖默认值。
此外,您可以使用可变变量,这样您就可以在循环中执行此操作。如果你的所有变量都以你的数组键命名,就像你的例子一样。
完整代码:
$aryDefault = ['input74'=>'', 'input75'=>'',...];
$aryFinal = array_merge($aryDefaults, $_POST);
foreach( $aryFinal as $key=>$value){
$$key = $value;
}
你甚至可以用循环生成 $aryDefault,如果它非常大的话。
$aryDefault = array();
for(i=0;i<=100;i++){
$aryDefault["input$i"] = "";
}
如果我理解正确,你想将变量设置为 post 或默认值,你可以按照以下结构进行操作:
$variable = isset($_POST['name']) ? $_POST['name] : "defaultvalue";
这将设置它存在的变量,否则设置指定的默认值。希望对您有所帮助。
你可以创建一个简单的函数来封装之前的代码PHP 7:
function post($key, $default = null){
return isset ($_POST[$key])?$_POST[$key]:$default;
}
自 PHP 7(使用 null coalescing operator (??
)):
function post($key, $default = null){
return $_POST[$key] ?? $default;
}
或更好的无功能只是简单(如上所述)
$value74 = $_POST['input74'] ?? ''; #default value
$value75 = $_POST['input75'] ?? ''; #default value
$value76 = $_POST['input76'] ?? ''; #default value
PHP 7 有一个新的运算符来解决这种特定情况:null coalesce operator (??) 替换了这个:
$foo = isset($foo) ? $foo : $bar
有了这个:
$foo = $foo ?? $bar;
我很迷茫。谁能解释我如何缩短这段代码。我有几百个!我提交了一个带有输入值的表单。每当我不填写值时,我都会收到错误消息。所以我制作了这些 isset 块以防止返回错误。但我看起来很没效率!请帮忙...谢谢
if(isset($_POST['input74'])){
$value74 = $_POST['input74'];
}else{
$value74 = "";#default value
}
if(isset($_POST['input75'])){
$value75 = $_POST['input75'];
}else{
$value75 = "";#default value
}
if(isset($_POST['input76'])){
$value76 = $_POST['input76'];
}else{
$value76 = "";#default value
PHP 支持表单中的数组。您可以使用索引命名您的表单字段,例如<input type="text" name="input[74]" ... />
。然后在 PHP 中,您可以使用 for
或 foreach
循环访问它们,因为它们将作为数组提供(即您将拥有 $_POST["input"][74]
)。你可以这样写:
$values = $_POST["input"];
for ($i = 0; $i < MAX_INPUTS; $i++) {
if (!isset($values[$i])) {
$values[$i] = ""; // default value
}
}
如果由于某种原因你不能改变 HTML 端,你仍然可以使用循环动态创建字段名称并将数据复制到 PHP 端的数组,类似于:
$value = array();
for ($i = 0; $i < MAX_INPUTS; $i++) {
$name = sprintf("input%d", $i);
if (isset($_POST[$name])) {
$value[$i] = $_POST[$name];
} else {
$value[$i] = ""; // default
}
}
在这两个建议的解决方案中,您只有几行代码,而不是几乎相同行的数十次重复。在这两个示例中,我假设您的字段以 input0
开头,并且总共有 MAX_INPUTS
个字段。如果不是所有字段都存在(例如,您只有 input1、intput2、input74 和 input75),您可以创建一个包含字段编号的数组:
$field_list = array(1,2,74,75);
然后使用它来检查您的数据(这里是 HTML 字段名称中包含数组的示例):
$values = $_POST["input"];
foreach ($field_list as $num) {
if (!isset($values[$num])) {
$values[$num] = ""; // default value
}
}
您可以将 isset
包装在这样的函数中
function myIsset(&$variable, $default = "")
{
if(isset($variable))
{
return $variable;
}
else
{
return $default;
}
}
然后你就可以这样称呼它 $value74 = myIsset($_POST['input74']);
第二个参数默认为空字符串,因此如果您想设置默认值,您可以提供它或更改函数头中的默认值(如果它们都相同)。下面是显示代码工作的屏幕截图
虽然是的,但您仍将每 $_POST
一行,至少您将 5 行代码与 1 行代码和上面的函数交换。您可以将其简化为一个循环,就像我在 this answer 中解释的那样,但是在没有看到表格并确认任何模式的情况下,我无法为此提供任何代码示例,因为您所展示的可能只是巧合
使用三元来缩短代码:
$value74 = isset($_POST['input74']) ? $_POST['input74'] : 'Default value';
$value75 = isset($_POST['input75']) ? $_POST['input75'] : 'Default value';
$value76 = isset($_POST['input76']) ? $_POST['input76'] : 'Default value';
或者您也可以遍历 $_POST 数组,但必须完成一些 filtering/validation。快速想法:
if(!empty($_POST)) {
$i = 0;
$arr = array();
foreach($_POST as $input) {
$arr[$i] = $input;
$i++;
}
}
$arr
然后会产生一个像
Array
(
[74] => 'value74'
[75] => 'value75'
[76] => 'value76'
)
你可以使用 array_merge
.
您将使用提供的所有默认输入值设置默认数组。
$aryDefault = ['input74'=>'', 'input75'=>'',...]
然后 array_merge
使用您的 post 数组,它将填充所有缺失值。注意:顺序很重要 check out the docs。
If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended.
使用 array_merge($aryDefault, $_POST)
以便 $_POST
覆盖默认值。
此外,您可以使用可变变量,这样您就可以在循环中执行此操作。如果你的所有变量都以你的数组键命名,就像你的例子一样。
完整代码:
$aryDefault = ['input74'=>'', 'input75'=>'',...];
$aryFinal = array_merge($aryDefaults, $_POST);
foreach( $aryFinal as $key=>$value){
$$key = $value;
}
你甚至可以用循环生成 $aryDefault,如果它非常大的话。
$aryDefault = array();
for(i=0;i<=100;i++){
$aryDefault["input$i"] = "";
}
如果我理解正确,你想将变量设置为 post 或默认值,你可以按照以下结构进行操作:
$variable = isset($_POST['name']) ? $_POST['name] : "defaultvalue";
这将设置它存在的变量,否则设置指定的默认值。希望对您有所帮助。
你可以创建一个简单的函数来封装之前的代码PHP 7:
function post($key, $default = null){
return isset ($_POST[$key])?$_POST[$key]:$default;
}
自 PHP 7(使用 null coalescing operator (??
)):
function post($key, $default = null){
return $_POST[$key] ?? $default;
}
或更好的无功能只是简单(如上所述)
$value74 = $_POST['input74'] ?? ''; #default value
$value75 = $_POST['input75'] ?? ''; #default value
$value76 = $_POST['input76'] ?? ''; #default value
PHP 7 有一个新的运算符来解决这种特定情况:null coalesce operator (??) 替换了这个:
$foo = isset($foo) ? $foo : $bar
有了这个:
$foo = $foo ?? $bar;