Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用isset值缩短代码_Php_Unique Values - Fatal编程技术网

Php 如何使用isset值缩短代码

Php 如何使用isset值缩短代码,php,unique-values,Php,Unique Values,我太迷路了。有人能解释一下我如何缩短这段代码吗。我有几百个这样的!我提交一个带有输入值的表单。每当我不填写一个值时,我就会得到一个错误。所以我制作了这些isset块来防止返回错误。但我似乎太没效率了!请帮忙……谢谢 if(isset($_POST['input74'])){ $value74 = $_POST['input74']; }else{ $value74 = "";#default value } if(isset($_POST['input75'])){ $value75 = $_

我太迷路了。有人能解释一下我如何缩短这段代码吗。我有几百个这样的!我提交一个带有输入值的表单。每当我不填写一个值时,我就会得到一个错误。所以我制作了这些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支持表单中的数组。您可以使用索引命名表单字段,例如
。然后在PHP中,您可以使用
for
foreach
循环访问这些对象,因为它们将作为数组提供(即,您将拥有
$\u POST[“input”][74]
)。你可以这样写:

$values = $_POST["input"];
for ($i = 0; $i < MAX_INPUTS; $i++) {
  if (!isset($values[$i])) {
    $values[$i] = "";  // default value
  }
}
$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
  }
}
然后使用它检查数据(这里是HTML字段名中的数组示例):


您可以将
isset
封装在如下函数中

function myIsset(&$variable, $default = "")
{
    if(isset($variable))
    {
        return $variable;
    }
    else
    {
        return $default;
    }
}
然后您只需将其命名为
$value74=myIsset($\u POST['input74'])

第二个参数默认为空字符串,因此如果要设置默认值,可以提供它,或者更改函数头中的默认值(如果它们都相同)。bellow是显示代码工作的屏幕截图


虽然是,但每个
$\u POST仍将有一行代码,至少用一行代码和上面的函数替换5行代码。您可以将其简化为一个循环,就像我在中所解释的那样,但是,在没有看到表单和确认任何模式的情况下,我无法给出任何代码示例,因为您所显示的可能只是巧合

使用三元组来缩短代码:

$value74 = isset($_POST['input74']) ? $_POST['input74'] : 'Default value';
$value75 = isset($_POST['input75']) ? $_POST['input75'] : 'Default value';
$value76 = isset($_POST['input76']) ? $_POST['input76'] : 'Default value';
或者您也可以循环使用$\u POST数组,但必须进行一些筛选/验证。快速想法:

if(!empty($_POST)) {
    $i = 0;
    $arr = array();
    foreach($_POST as $input) {
        $arr[$i] = $input;
        $i++;
    }
}
$arr
将生成一个类似

Array
(
    [74] => 'value74'
    [75] => 'value75'
    [76] => 'value76'
)

您可以使用
array\u merge

您可以使用提供的所有默认输入值设置默认数组

$aryDefault = ['input74'=>'', 'input75'=>'',...]
然后
array\u将这个与post数组合并,它将填充所有缺少的值。注意:顺序很重要

如果输入数组具有相同的字符串键,则后面的值 因为该键将覆盖上一个键。但是,如果 如果包含数字键,则后面的值不会覆盖原始值 值,但将被追加

使用
array\u merge($aryDefault,$\u POST)
,以便
$\u 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"] = "";
}
$aryDefault=array();

对于(i=0;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开始(使用):

或者更好,没有简单的功能(如上所述)


PHP7有一个新的操作符来解决这一特定情况:(?)替换了这个操作符:

$foo = isset($foo) ? $foo : $bar
为此:

$foo = $foo ?? $bar;

一个选项:
$value74=isset($\u POST['input74'])?$\u POST['input74']:“”;
。您可以循环并用变量替换数字。如果您发现自己像这样对输入进行编号,那么您可能应该使用数组来代替……然后您可以在PHP中循环它,而不必显式地命名每个元素。使用诸如@FirstOne之类的三元运算符在一行上获得变量赋值。但是,您确实应该遵循Mark Baker的建议。请使用表单中的示例更新您的问题。为您的问题提供备选方案或答案会更容易。此外,了解如何使用
$\u POST
中的变量也会有所帮助。您的示例不起作用,因为使用name字段会导致错误将所有内容转换成字符串。
name=“input[74]”
将实际显示为
$\u POST[“input”][“74”]
,而不是
$\u POST[“input”][74]
。不仅如此,
HTML
实际上还支持表单中的数组创建一个php可以破译的查询字符串。但是Java或JavaScriptSorry@iam decoder也可以。这是不正确的。整数键在php中将是整数键。事实上,我刚刚尝试过……尽管字符串索引不会因为动态键入而受损。奇怪,这在IIS服务器上是否有所不同?因为字符串转换是不久前这里的一个问题的答案。PHP手册中明确规定,数组的任何字符串索引都将作为有效整数使用……请参见此答案:-@iam decoder,您是否有指向与IIS相关的字符串转换答案的链接?我很好奇要了解更多信息,请将其更改为myIsset(&$variable,
@AbraCadaver,这是不正确的。我不仅尝试了OP的
$\u POST
变量,还尝试了这行代码
$hello=“dood”;var\u dump(myIsset($hello));
。注释掉
$hello
行,它将返回我指定的
$default
,当注释掉时,它将返回与传递的值完全相同的值。添加
和$variable
得到完全相同的值resaults@Memor-打开错误报告,您将看到代码不正确的原因。改为通过引用传递变量,以避免出现未定义变量警告,这实际上是首先使用isset的要点。isset手册页面@rjdown ahhh的注释部分中有此函数的一个版本,这可能就是原因。我倾向于将其打开off@downvoter如果你的反对票是关于我最初的想法
$variable
而不是
&$variable
,然后您可以删除已修复的否决票。否则,请解释错误
function post($key, $default = null){
    return $_POST[$key] ?? $default;
}
$value74 = $_POST['input74'] ?? ''; #default value
$value75 = $_POST['input75'] ?? ''; #default value
$value76 = $_POST['input76'] ?? ''; #default value
$foo = isset($foo) ? $foo : $bar
$foo = $foo ?? $bar;