簡體   English   中英

如何存儲isset條件php以避免重復

[英]how to store isset condition php to avoid repetition

我的代碼:

if (isset($dayMarks[$res['resId']][$dDate])) {
     $var=$dayMarks[$res['resId']][$dDate];
     echo $var;
}

請注意,isset條件與分配給$ var的值相同,這將創建一個難看的代碼。

如何將條件賦給$ var而又不重復呢?

(在javascript中, if (var=$dayMarks[$re...)

這是PHP中的常見問題,其中包含文件可能會導致變量不確定。

有兩種方法對我有效。

默認分配

使用默認賦值時,鍵不存在時,會將$ var變量賦予默認值。

$ var = isset($ dayMarks [$ res ['resId']] [$ dDate])嗎? $ dayMarks [$ res ['resId']] [$ dDate]:false;

此代碼之后可以假定$ var將始終包含有效值。

默認合並

我的首選方法是始終聲明一個包含所有必需值及其默認值的默認數組。 使用False值標記可能缺少某個值的任何鍵(假定該鍵除了布爾值外還具有其他值類型)。

$default = array(
    'date'=>false,
    'name'=>'John Doe'
);

$dayMarks[$res['resId']] = array_merge($default, $dayMarks[$res['resId']]);

這將確保該變量所需的鍵存在,並至少保留一個默認值。

現在,您可以測試日期是否存在。

if($dayMarks[$res['resId']]['date'] !== false)
{
     // has a date value
}

雖然這可能不適用於您的陣列。 由於它看起來像是一個表結構。 切換到命名鍵/值對是有好處的。 這樣一來,您可以輕松地將默認值分配給該數組。

編輯:

實際的問題是是否可以重現JavaScript代碼。

如果(var = $ dayMarks [$ re ...)

是的,這可以通過使用輔助功能來完成。

注意:此技巧只能用於非布爾類型。

 function _isset($arr,$key)
 {
    return isset($arr[$key]) ? $arr[$key] : false;
 }

 $a = array('zzzz'=>'hello');
 if(($b = _isset($a,'test')) !== false)
 {
    echo $b;
 }
 if(($c = _isset($a,'zzzz')) !== false)
 {
    echo $c;
 }

看到上面的代碼在這里

$isset = isset(...); //save the value
if ($isset) { .... }; // reuse the value
...
if ($isset) { ... }; // reuse it yet again

您唯一可以做的就是存儲$res['resId'][$dDate]

$var = $res['resId'][$dDate];
if( isset($dayMarks[$var]) ) {
    $var = $dayMarks[$var];
    echo $var;
}

如果只想簡單地分配變量處理,也可以這樣寫:

$var = $dayMarks[$res['resId']][$dDate]);
if (!isset($var)) unset($var);

暫無
暫無

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

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