簡體   English   中英

如何在PHP中縮短多個isset函數

[英]How to shorten multiple isset functions in PHP

看我的腳本:

if((isset($_POST['unma']) && isset($_POST['livi'])) && (isset($_POST['cont']) && 

    isset($_POST['phone']))){
        if(
            (
                (
                    (
                        (isset($_POST['fnma']) && isset($_POST['lnma']))
                        &&
                        (isset($_POST['occ']) && isset($_POST['hom']))
                    )
                    &&
                    (
                        (isset($_POST['town']) && isset($_POST['dist']))
                        &&
                        (isset($_POST['dispmb']) && isset($_POST['fbc']))
                    )
                )
                &&
                (
                    (
                        (isset($_POST['gp']) && isset($_POST['twt']))
                        &&
                        (isset($_POST['ins']) && isset($_POST['flc']))
                    )
                    &&
                    (
                        (isset($_POST['ile']) && isset($_POST['cam']))
                        &&
                        (isset($_POST['cam_co']) && isset($_POST['prof_phr']))
                    )
                )
            )
            &&
            isset($_POST['awards'])
        ){
                // Codes here
        }

我該如何縮短這個isset函數。 我找到了一個foreach解決方案,但是他們沒有檢查發布的isset ,而是他們正在檢查發布的值是否不為空

您可以使用

if (isset($_POST['a'], $_POST['b'], $_POST['c'], ...))

等等。 如果未設置任何變量,那么您將得到false

$expectedKeys = ['fnma', 'lnma', ...];
if (!array_diff_key(array_flip($expectedKeys), $_POST)) {
    // all keys are set
}

我認為這樣會起作用:

 // add all names of the values that needs to be set in the `$_POST` array
 $values = array('fnma', 'lnma');

 function checkSet($array) {
   foreach($array as $value) {
     if(!isset($_POST[$value])) return false;
   }
   return true;
 }
 if(checkSet($values)) {
   // your code
 }

將必填字段放入數組中並使用循環進行檢查,添加必填字段非常容易。

$req_values = array('fnma','lnma','occ','hom','town','dist','dispmb','fbc','gp','twt','ins','flc','ile','cam','cam_co','prof_phr');


foreach($req_values as $key) {
  if (empty($_POST[$key])) {
           echo $key .'is required';
           exit;
      }
}

知道isset可以采用多個值,您可以這樣做:

if (isset($_POST['unma'], $_POST['livi'], $_POST['cont'], $_POST['phone'], $_POST['fnma'], $_POST['lnma'], $_POST['occ'], $_POST['hom'], $_POST['town'], $_POST['dist'], $_POST['dispmb'], $_POST['fbc'], $_POST['gp'], $_POST['tat'], $_POST['ins'], $_POST['flc'], $_POST['ile'], $_POST['cam'], $_POST['cam_co'], $_POST['prof_phr'], $_POST['awards'])) {
    // Codes here
}

但這似乎是噩夢。 我將使$_POST鍵成為一個數組,然后執行以下操作:

// Set an array of post values.
$post_values = array('unma','livi','cont','phone','fnma','lnma','occ','hom','town','dist','dispmb','fbc','gp','tat','ins','flc','ile','cam','cam_co','prof_phr','awards');

// Set '$post_valid' to an array.
$post_valid = array();

// Roll through the post values.
foreach ($post_values AS $post_key => $post_value) {
  // If the value is  set, set '$post_valid' to TRUE or else set it to FALSE.
  // $post_valid = isset($_POST[$post_key]) ? TRUE : FALSE; // Not really needed. Simple `isset` should work.
  $post_valid[$post_key] = !empty($_POST[$post_key]);
}

// Now if '$post_valid' values are all true, do something.
$post_valid_values = array_values($post_valid);
if (!empty($post_valid_values) && (count($post_valid_values) == count($post_values))){
  // Codes here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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