簡體   English   中英

PHP - 一種簡單的方法嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM