[英]PHP - an easy way to do this?
我是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;
}
?>
由於在運行任何腳本之前就知道了所有后變量的名稱,因此可以創建這些名稱的數組:
$names = [
'Arbejdsmiljoudvalget',
'Boligpolitisk',
...
];
然后循環該數組並檢查該名稱是否在POST數組中:
foreach ($names as $name) {
${$name} = isset($_POST[$name]) ? $_POST[$name] : 0;
}
但我認為有很多變數是個壞主意。 最好將它們添加到數組中,而不是使用$values['Arbejdsmiljoudvalget']
HankyPanky解決方案很不錯,但你要求的是一個foreach結構:
有人建議在$_POST
數組上執行extract()
,但這是不安全的,因為允許覆蓋任何內部變量。 同樣可以直接循環遍歷$_POST
數組,但出於同樣的原因,這也是錯誤的。 你必須在提取之前過濾除$_POST
之外的任何白名單變量,或者像這樣使用白名單並循環遍歷它:
<?php
$dict = array(
'Arbejdsmiljoudvalget',
'Boligpolitisk',
'Dove',
'Energi',
// ...
);
foreach ($dict as $term) {
if (isset($_POST[$term])){
${$term} = $_POST[$term];
continue;
}
${$term} = 0;
}
請注意,提取POST數據的方法比手動更好。
<?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;
$list = array( 'Arbejdsmiljoudvalget', 'Boligpolitisk' );
foreach( $list as $param ){
if( isset( $_POST[ $param ] ) ){
$$param = $_POST[ $param ];
continue;
}
$$param = 0;
}
$$param
的額外美元創建一個名稱存儲在$param
的變量。 例如,它與做的一樣:
$Arbejdsmiljoudvalget = 'somevalue';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.