my code:
if (isset($dayMarks[$res['resId']][$dDate])) {
$var=$dayMarks[$res['resId']][$dDate];
echo $var;
}
请注意,isset条件与分配给$var的值相同,这创建了一个相当难看的代码。
如何可能将条件分配给$var而不重复它?
(在javascript中,我会写if (var=$dayMarks[$re...)
)
这是PHP中一个常见的问题,包含文件可能会导致变量的不确定性。
有两种方法对我来说很有效。
默认赋值
使用默认赋值,当键不存在时,$var变量将被赋予一个默认值。
$ var =收取($白昼标志(res美元[渣油的]][$ dDate]) ?$dayMarks[$res['resId']][$dDate]: false;
在这段代码之后,可以假设$var总是包含一个有效值。
<<p> 默认合并/strong>我的首选方法是总是声明一个包含所有必需值及其默认值的默认数组。使用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 = $白昼标志[$…)
是的,这可以通过使用辅助函数来完成。
注意:此技巧只能用于非布尔类型。
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);