1

我的代码:

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

请注意,isset 条件与分配给 $var 的值相同,这会创建一个非常丑陋的代码。

如何将条件分配给 $var 而无需重复?

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

4

4 回答 4

2

这是 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 代码。

if (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;
 }

在此处查看上面的代码

于 2013-01-16T17:22:24.030 回答
0
$isset = isset(...); //save the value
if ($isset) { .... }; // reuse the value
...
if ($isset) { ... }; // reuse it yet again
于 2013-01-16T17:15:25.290 回答
0

你唯一能做的就是存储$res['resId'][$dDate]

$var = $res['resId'][$dDate];
if( isset($dayMarks[$var]) ) {
    $var = $dayMarks[$var];
    echo $var;
}
于 2013-01-16T17:18:21.630 回答
-1

如果你只想简单地分配一个变量处理,你也可以这样写:

$var = $dayMarks[$res['resId']][$dDate]);
if (!isset($var)) unset($var);
于 2013-01-16T17:52:17.617 回答