簡體   English   中英

如何使用isset值縮短我的代碼

[英]How can I shorten my code with isset values

我很失落。 誰能解釋我如何縮短這段代碼。 我有數百個! 我提交了一個帶有輸入值的表單。 每當我不填寫值時,就會出現錯誤。 所以我制作了這些 isset 塊以防止返回錯誤。 但我似乎效率很低! 請幫助...謝謝

if(isset($_POST['input74'])){
$value74 = $_POST['input74'];
}else{
$value74 = "";#default value
}

if(isset($_POST['input75'])){
$value75 = $_POST['input75'];
}else{
$value75 = "";#default value
}

if(isset($_POST['input76'])){
$value76 = $_POST['input76'];
}else{
$value76 = "";#default value

您可以將isset包裝在這樣的函數中

function myIsset(&$variable, $default = "")
{
    if(isset($variable))
    {
        return $variable;
    }
    else
    {
        return $default;
    }
}

然后你就可以這樣稱呼它$value74 = myIsset($_POST['input74']);

第二個參數默認為空字符串,因此如果您想設置默認值,您可以提供它或更改函數頭中的默認值(如果它們都相同)。 波紋管是顯示代碼工作的屏幕截圖

測試

雖然是的,您仍然每個$_POST有一行,至少您用 1 行代碼和上面的函數交換 5 行代碼。 你可以把它簡化成一個循環,就像我在這個答案中解釋的那樣,但是沒有看到表格和確認任何模式,我不能給出任何代碼示例,因為你所展示的可能只是巧合

PHP 7 有一個新的運算符來解決這種特殊情況:空合並運算符(??) 替換了這個:

$foo = isset($foo) ? $foo : $bar

有了這個:

$foo = $foo ?? $bar;

PHP 支持表單中的數組。 您可以使用索引命名表單字段,例如<input type="text" name="input[74]" ... /> 然后在 PHP 中,您可以使用forforeach循環訪問它們,因為它們將作為數組可用(即您將擁有$_POST["input"][74] )。 你可以這樣寫:

$values = $_POST["input"];
for ($i = 0; $i < MAX_INPUTS; $i++) {
  if (!isset($values[$i])) {
    $values[$i] = "";  // default value
  }
}

如果由於某種原因您無法更改 HTML 端,您仍然可以使用循環來動態創建字段名稱並將數據復制到 PHP 端的數組中,例如:

$value = array();
for ($i = 0; $i < MAX_INPUTS; $i++) {
  $name = sprintf("input%d", $i);
  if (isset($_POST[$name])) {
    $value[$i] = $_POST[$name];
  } else {
    $value[$i] = "";  // default
  }
}

在這兩個提議的解決方案中,您只有幾行代碼,而不是幾乎相同行的數十次重復。 在這兩個示例中,我假設您的字段以input0開頭,並且總共有MAX_INPUTS字段。 如果並非所有字段都存在(例如,您只有 input1、intput2、input74 和 input75),您可以創建一個包含字段編號的數組:

$field_list = array(1,2,74,75);

然后使用它來檢查您的數據(這里是 HTML 字段名稱中的數組示例):

$values = $_POST["input"];
foreach ($field_list as $num) {
  if (!isset($values[$num])) {
    $values[$num] = "";  // default value
  }
}

使用三元組來縮短代碼:

$value74 = isset($_POST['input74']) ? $_POST['input74'] : 'Default value';
$value75 = isset($_POST['input75']) ? $_POST['input75'] : 'Default value';
$value76 = isset($_POST['input76']) ? $_POST['input76'] : 'Default value';

或者您也可以遍歷 $_POST 數組,但必須進行一些過濾/驗證。 快速想法:

if(!empty($_POST)) {
    $i = 0;
    $arr = array();
    foreach($_POST as $input) {
        $arr[$i] = $input;
        $i++;
    }
}

$arr然后會產生一個數組

Array
(
    [74] => 'value74'
    [75] => 'value75'
    [76] => 'value76'
)

您可以使用array_merge

您將使用提供的所有默認輸入值設置默認數組。

$aryDefault = ['input74'=>'', 'input75'=>'',...]

然后array_merge它與您的 post 數組進行array_merge ,它將填充所有缺失值。 注意:訂單很重要,請查看文檔

如果輸入數組具有相同的字符串鍵,則該鍵的后一個值將覆蓋前一個。 但是,如果數組包含數字鍵,則后面的值不會覆蓋原始值,而是會附加。

使用array_merge($aryDefault, $_POST)以便$_POST覆蓋默認值。

此外,您可以使用可變變量,以便您可以在循環中執行此操作。 如果您的所有變量都以您的數組鍵命名,就像您的示例一樣。

完整代碼:

$aryDefault = ['input74'=>'', 'input75'=>'',...];
$aryFinal = array_merge($aryDefaults, $_POST);
foreach( $aryFinal as $key=>$value){
  $$key = $value;
}

你甚至可以用循環生成 $aryDefault,如果它超級大的話。

$aryDefault = array();
for(i=0;i<=100;i++){
  $aryDefault["input$i"] = "";
}

如果我理解你正確地看到你想設置一個變量來發布或其他默認值,你可以按照以下結構進行:

$variable = isset($_POST['name']) ? $_POST['name] : "defaultvalue";

這將設置它存在的變量,否則設置指定的默認值。 我希望這有幫助。

可以創建一個簡單的函數來封裝 PHP 7 之前的代碼:

function post($key, $default = null){
    return isset ($_POST[$key])?$_POST[$key]:$default;
}

自 PHP 7 起(使用空合並運算符 ( ?? ) ):

function post($key, $default = null){
    return $_POST[$key] ?? $default;
}

或更好的無功能只是簡單(如上所述)

$value74 = $_POST['input74'] ?? ''; #default value
$value75 = $_POST['input75'] ?? ''; #default value
$value76 = $_POST['input76'] ?? ''; #default value

暫無
暫無

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

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