我有一系列变量需要根据某个条件对两个值中的一个进行处理;在这种情况下,从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,或者我坚持这个,因为每个变量都需要自己评估?
答案 0 :(得分: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'];
}
}
答案 1 :(得分: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'];
}
}
保存数组中的变量和条件(当然数组结构可以不同)并只循环遍历它们
希望有所帮助
答案 2 :(得分:1)
PHP支持“变量变量”,使用双美元符号语法。例如:
$var1 = 'foo';
$name = 'var1';
echo $$name; // prints "foo"
http://php.net/manual/en/language.variables.variable.php
但是,如果你真的有那么多变量,那么最好将它们存储在一个数组中。
答案 3 :(得分: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
答案 4 :(得分: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
答案 5 :(得分:0)
您不需要{
和}
:
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
}
答案 6 :(得分: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'];
}
答案 7 :(得分:0)
Chris我发现你需要这个解决方案来获取一些POSTS变量。 我的建议是确保在HTML代码中将所有输入框从“var1”,“var2”,“var3”等重命名为“var []”
HTML SIDE示例
<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;
}
}
}
- &GT;
&GT;