我是php的新手。我将不得不重复这50次,所以我希望有一个简单的方法。 有一个简单的方法吗?
<?php
if (isset($_POST['Arbejdsmiljoudvalget'])){
$Arbejdsmiljoudvalget = $_POST['Arbejdsmiljoudvalget'];
} else {
$Arbejdsmiljoudvalget =0;
}
if (isset($_POST['Boligpolitisk'])){
$Boligpolitisk = $_POST['Boligpolitisk'];
} else {
$Boligpolitisk =0;
}
if (isset($_POST['Dove'])){
$Dove = $_POST['Dove'];
} else {
$Dove =0;
}
if (isset($_POST['Energi'])){
$Energi = $_POST['Energi'];
} else {
$Energi =0;
}
?>
答案 0 :(得分:5)
由于在运行任何脚本之前就知道了所有后期变量的名称,因此可以创建这些名称的数组:
$names = [
'Arbejdsmiljoudvalget',
'Boligpolitisk',
...
];
比循环该数组并检查该名称是否在POST数组中:
foreach ($names as $name) {
${$name} = isset($_POST[$name]) ? $_POST[$name] : 0;
}
但我认为有很多变数是个坏主意。最好将它们添加到数组中,而不是像$values['Arbejdsmiljoudvalget']
答案 1 :(得分:4)
HankyPanky解决方案很不错,但您要求的是foreach构造:
有人建议在extract()
数组上执行$_POST
,但这是不安全的,因为允许覆盖任何内部变量。同样可以直接循环遍历$_POST
数组,但出于同样的原因,这也是错误的。在提取之前,您必须在$_POST
之前过滤除了列入白名单的变量之外的所有内容,要么具有这样的白名单并循环播放它:
<?php
$dict = array(
'Arbejdsmiljoudvalget',
'Boligpolitisk',
'Dove',
'Energi',
// ...
);
foreach ($dict as $term) {
if (isset($_POST[$term])){
${$term} = $_POST[$term];
continue;
}
${$term} = 0;
}
请注意,提取POST数据的方法比手动更好。
答案 2 :(得分:2)
<?php
foreach ( $_POST as $key => $value ) {
if ( isset($value) ) {
${$key} = $value;
}
else {
${$key} = 0;
}
}
?>
要使我的原始建议使用Justinas注意使用$values
数组而不是仅创建50个变量(也不会允许覆盖其他变量,如$isAdmin
或其他变量(如Sergey Telshevsky评论到我的第一个建议))。
此外,您不必确定字典中的每个值并循环$dict
数组,所以这是一个示例:
foreach ( $_POST as $key => $value ) {
$values[$key] = ( isset($value) ? $value : 0 );
}
这将循环每个发布的值并检查是否isset()
,否则将为其赋值0。
然后使用发布的值,如:
print "Thank you {$values['Name']} for submitting the form.<br/>" . PHP_EOL;
print "Your energy consumption {$values['Energi']}<br/>" . PHP_EOL;
答案 3 :(得分:1)
$list = array( 'Arbejdsmiljoudvalget', 'Boligpolitisk' );
foreach( $list as $param ){
if( isset( $_POST[ $param ] ) ){
$$param = $_POST[ $param ];
continue;
}
$$param = 0;
}
$$param
中的额外美元会创建一个名称存储在$param
中的变量。
例如,它与做:
$Arbejdsmiljoudvalget = 'somevalue';