1

我有一系列变量需要根据特定条件取两个值中的一个;在本例中,是从 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,还是我坚持这个,因为每个变量都需要自己评估?

4

8 回答 8

8

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'];
    }
}
于 2013-10-23T12:09:19.870 回答
1

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

$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'];
    }
}

将变量和条件保存在数组中(数组结构当然可以不同)并循环遍历它们

希望能帮助到你

于 2013-10-23T12:12:43.973 回答
1

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

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

echo $$name; // prints "foo"

http://php.net/manual/en/language.variables.variable.php

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

于 2013-10-23T12:13:06.860 回答
1

你可以这样做:

$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
于 2013-10-23T12:15:20.490 回答
1

做简单的好:

$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
  }
}

并通过他们的索引访问它:

echo $var[1];
echo $var[2];
echo $var[3];
... // and etc
于 2013-10-23T12:15:27.610 回答
0

你不需要{and }

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 
}
于 2013-10-23T12:14:09.630 回答
0

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

for ($i=1; $i <= 20; $i++) { 
  $row['condition'.$i] == 0 ? ${'var'.$i} = $_POST['var'.$i] : ${'var'.$i} =    $_POST['var' . $i . 'hidden'];
}
于 2013-10-23T12:20:46.537 回答
0

克里斯,我看到您需要此解决方案才能获取一些 POSTS 变量。我的建议是确保在您的 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;
        }

    }
}

-->

?>

于 2013-10-23T12:26:08.377 回答