繁体   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