[英]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 中,您可以使用for
或foreach
循環訪問它們,因為它們將作為數組可用(即您將擁有$_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.