Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.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 IF语句;想办法收紧我的代码吗_Php_Mysql_Loops - Fatal编程技术网

多个PHP IF语句;想办法收紧我的代码吗

多个PHP IF语句;想办法收紧我的代码吗,php,mysql,loops,Php,Mysql,Loops,我有一系列变量,需要根据特定条件取两个值中的一个;在本例中,是从MySQL数据库中提取的值。为了简单起见,假设变量是$var1、$var2、$var3等等。我有20个这样设置的变量,每个变量都附加到一个表单字段。现在,确定其值的逻辑如下所示: if($row['condition1'] == 0) //Value pulled from MySQL table { $var1 = $_POST['var1']; //Value from a form field } else { $

我有一系列变量,需要根据特定条件取两个值中的一个;在本例中,是从MySQL数据库中提取的值。为了简单起见,假设变量是$var1、$var2、$var3等等。我有20个这样设置的变量,每个变量都附加到一个表单字段。现在,确定其值的逻辑如下所示:

if($row['condition1'] == 0) //Value pulled from MySQL table {
  $var1 = $_POST['var1']; //Value from a form field
  } else {
  $var1 = $_POST['var1hidden']; //Value from a hidden field
  }

if($row['condition2'] == 0) //Value pulled from MySQL table {
  $var2 = $_POST['var2']; //Value from a form field
  } else {
  $var2 = $_POST['var2hidden']; //Value from a hidden field
  }

这是可行的,但我不想复制二十次。有没有一种方法可以循环使用$var1-$var20,还是因为每个变量都需要自己进行计算,所以我只能这样做?

最好的解决方案是使用
name[]
语法将HTML表单输入更改为类似数组的结构。这样,您就可以摆脱20个不同的变量,高效地管理用户输入

但是,您可以使用
${}
语法动态定义和比较变量:

for ($i=1; $i <= 20; $i++) { 
    if($row['condition'.$i] == 0) {
        ${'var'.$i} = $_POST['var'.$i];
    } else {
        ${'var'.$i} = $_POST['var'.$i.'hidden'];
    }
}

for($i=1;$i最佳解决方案是使用
name[]
语法将HTML表单输入更改为类似数组的结构。这样,您就可以摆脱20个不同的变量,高效地管理用户输入

但是,您可以使用
${}
语法动态定义和比较变量:

for ($i=1; $i <= 20; $i++) { 
    if($row['condition'.$i] == 0) {
        ${'var'.$i} = $_POST['var'.$i];
    } else {
        ${'var'.$i} = $_POST['var'.$i.'hidden'];
    }
}

对于($i=1;$i我不知道我是否理解您的案例,但这将是我的快速解决方案

$vars = array('var1' => 'condition1', 'var2' => 'condition2', 'var3' => 'condition3');

foreach ($vars as $var => $condition) {
    if ($row[$condition] == 0) {
        $$var = $_POST[$var];
    } else {
        $$var = $_POST[$var . 'hidden'];
    }
}
将变量和条件保存在一个数组中(当然,数组结构可以不同),然后循环遍历它们


希望能有所帮助

我不知道我是否理解你的情况,但这将是我的快速解决方案

$vars = array('var1' => 'condition1', 'var2' => 'condition2', 'var3' => 'condition3');

foreach ($vars as $var => $condition) {
    if ($row[$condition] == 0) {
        $$var = $_POST[$var];
    } else {
        $$var = $_POST[$var . 'hidden'];
    }
}
将变量和条件保存在一个数组中(当然,数组结构可以不同),然后循环遍历它们

希望对您有所帮助。PHP支持“变量”,使用双美元符号语法。例如:

$var1 = 'foo';
$name = 'var1';

echo $$name; // prints "foo"

但是,如果您确实有那么多变量,那么最好将它们存储在数组中。

PHP支持“变量变量”,使用双美元符号语法。例如:

$var1 = 'foo';
$name = 'var1';

echo $$name; // prints "foo"


但是,如果您确实有那么多变量,那么最好将它们存储在数组中。

您不需要
{
}

if($row['condition1'] == 0) $var1 = $_POST['var1']; //Value from a form field
else $var1 = $_POST['var1hidden']; //Value from a hidden field 
if($row['condition2'] == 0) $var2 = $_POST['var2']; //Value from a form field
else $var2 = $_POST['var2hidden']; //Value from a hidden field
你可以做:

foreach ( $row as $key => $value ) {
  if($value == 0) $$var.($key+1) = $_POST['var'.($key+1)]; //Value from a form field
  else $$var.($key+1) = $_POST['var'.($key+1).'hidden']; //Value from a hidden field 
}

您不需要
{
}

if($row['condition1'] == 0) $var1 = $_POST['var1']; //Value from a form field
else $var1 = $_POST['var1hidden']; //Value from a hidden field 
if($row['condition2'] == 0) $var2 = $_POST['var2']; //Value from a form field
else $var2 = $_POST['var2hidden']; //Value from a hidden field
你可以做:

foreach ( $row as $key => $value ) {
  if($value == 0) $$var.($key+1) = $_POST['var'.($key+1)]; //Value from a form field
  else $$var.($key+1) = $_POST['var'.($key+1).'hidden']; //Value from a hidden field 
}
您可以这样做:

$i=1;
while ($i<=20){
if($row['condition[$i]']==0) {
$var[$i] = $_POST['var[$i]'];
} else {
$var[$i] = $_POST['var[$i]hidden'];
}
$i++;
} // END OF YOUR WHILE LOOP
$i=1;
而($i您可以这样做:

$i=1;
while ($i<=20){
if($row['condition[$i]']==0) {
$var[$i] = $_POST['var[$i]'];
} else {
$var[$i] = $_POST['var[$i]hidden'];
}
$i++;
} // END OF YOUR WHILE LOOP
$i=1;
而($i做简单的OK:

$var=Array();
for($i=1;$i<=20;$i++){
  if($row['condition'] == 0) //Value pulled from MySQL table {
     $var[$i] = $_POST['var'.$i]; //Value from a form field
  } else {
     $var[$i] = $_POST['var'.$i.'hidden']; //Value from a hidden field
  }
}
做简单的好的:

$var=Array();
for($i=1;$i<=20;$i++){
  if($row['condition'] == 0) //Value pulled from MySQL table {
     $var[$i] = $_POST['var'.$i]; //Value from a form field
  } else {
     $var[$i] = $_POST['var'.$i.'hidden']; //Value from a hidden field
  }
}

我认为Amal缺少$row var,您可以使用三元运算符来减少代码,如下所示:

for ($i=1; $i <= 20; $i++) { 
  $row['condition'.$i] == 0 ? ${'var'.$i} = $_POST['var'.$i] : ${'var'.$i} =    $_POST['var' . $i . 'hidden'];
}

对于($i=1;$i我认为Amal缺少$row变量,您可以使用三元运算符来减少代码,如下所示:

for ($i=1; $i <= 20; $i++) { 
  $row['condition'.$i] == 0 ? ${'var'.$i} = $_POST['var'.$i] : ${'var'.$i} =    $_POST['var' . $i . 'hidden'];
}

for($i=1;$iChris我知道你需要这个解决方案来获取一些帖子变量。
我的建议是确保在HTML代码中,将所有输入框从“var1”、“var2”、“var3”等重命名为“var[]”

HTML附带示例

<input type="text" name="var[]" >
<input type="text" name="var[]" >
<input type="text" name="var[]" >
<input type="text" name="var[]" >
<input type="text" name="varhidden[]" >
<input type="text" name="varhidden[]" >
<input type="text" name="varhidden[]" >
<input type="text" name="varhidden[]" >

PHP附带示例
$vars = $_POST[ "var" ];
$vars_hidden = $_POST[ "varhidden" ];

$vars_result = array();

if( !empty( $vars ) ){
    for( $v = 0; $v < count( $vars ); $v++ ){

        if( isset( $vars[ $v ] ) ){
            $vars_result[ $v ] = $vars[ $v ];
        } elseif( isset( $vars_hidden[ $v ] ) ){
            $vars_result[ $v ] = $vars_hidden[ $v ];
        } else {
            $vars_result[ $v ] = NULL;
        }

    }
}
$vars=$\u POST[“var”];
$vars\u hidden=$\u POST[“varhidden”];
$vars_result=array();
如果(!空($vars)){
对于($v=0;$v
-->


?>

克里斯,我知道你需要这个解决方案来获取一些帖子。 我的建议是确保在HTML代码中,将所有输入框从“var1”、“var2”、“var3”等重命名为“var[]”

HTML附带示例

<input type="text" name="var[]" >
<input type="text" name="var[]" >
<input type="text" name="var[]" >
<input type="text" name="var[]" >
<input type="text" name="varhidden[]" >
<input type="text" name="varhidden[]" >
<input type="text" name="varhidden[]" >
<input type="text" name="varhidden[]" >

PHP附带示例
$vars = $_POST[ "var" ];
$vars_hidden = $_POST[ "varhidden" ];

$vars_result = array();

if( !empty( $vars ) ){
    for( $v = 0; $v < count( $vars ); $v++ ){

        if( isset( $vars[ $v ] ) ){
            $vars_result[ $v ] = $vars[ $v ];
        } elseif( isset( $vars_hidden[ $v ] ) ){
            $vars_result[ $v ] = $vars_hidden[ $v ];
        } else {
            $vars_result[ $v ] = NULL;
        }

    }
}
$vars=$\u POST[“var”];
$vars\u hidden=$\u POST[“varhidden”];
$vars_result=array();
如果(!空($vars)){
对于($v=0;$v
-->


?>

虽然这是一种常见的方法,但我认为最好的解决方案是将HTML中的变量命名为数组(即使用
[]
语法),这样就可以在PHP中去掉20个变量。我建议您在回答中提到,如果我的变量名为CoPI1Name、CoPI2Name等,我的代码会是这样的吗($i=1;$i是一个很好的解决方案,我只知道${}从你那里,哈哈,我不知道…我+1你!@AmalMurali:很好的解决方案。像一个魔咒一样工作,它也会帮助我的表单的其他部分。感谢!+1的
最好的解决方案是更改你的HTML表单输入
,虽然这是一种常见的方法,但我认为最好的解决方案是将HTML中的变量命名为数组(即使用
[]
syntax),所以在PHP中去掉20个变量。我建议您在回答中提到,如果我的变量名为CoPI1Name、CoPI2Name等,我的代码会像这样吗?对于($I=1;$I)我很好地解决了Amal,我只知道${}从你那里,哈哈,我不知道…我+1你!@AmalMurali:很好的解决方案。像一个魔咒一样工作,它也会帮助我的表单的其他部分。谢谢!+1的
最好的解决方案是更改HTML表单输入
你总是有20个变量,还是会更改?你总是有20个变量,还是会更改?R移除大括号不是一个很好的主意。如果你有很多条件语句,它会让人困惑。而且,这也不能回答OP的问题。你仍然需要定义和比较20个变量。我不认为OP是这么要求的。但我不想复制它二十次。移除大括号不是一个很好的主意。我如果你有很多条件语句,你就不会感到困惑。而且,这也不能回答OP的问题。你仍然需要定义和比较20个变量。我不认为OP是这么问的