在Visual Basic中有一个名为Nz()的函数用于应用程序。该函数检查变量nullity,如果发现变量为null,则返回提供的值。
我尝试在php中编写相同的函数,如下所示:
function replace_null($value, $replace) {
if (!isset($value)) {
return $replace;
} else {
return $value;
}
}
$address = replace_null($data['address'], 'Address is not available.');
当然,如果发现$data['address']
为null,php将停止执行代码并且不会调用replace_null
。
我目前正在使用三元
(isset(data['address']) ? data['address'] : 'Address is not available.');
但我认为replace_null
,如果有效,将提供更方便的方式。
php中有一个函数提供与vba的Nz()相同的功能吗? 任何建议将不胜感激。
提前感谢。
答案 0 :(得分:3)
有点迂回:如果您只使用它来检查数组成员,您可以单独传递密钥:
function get_with_default($arr, $key, $defval)
{
return isset($arr[$key]) ? $arr[$key] : $defval;
}
如果可以设置变量但是为null(编辑:它不能,感谢@deceze),请添加另一个检查:
function get_and_coalesce_with_default($arr, $key, $defval)
{
return (isset($arr[$key]) && !is_null($arr[$key]) ? $arr[$key] : $defval;
}
正如所指出的,isset()
仅对非空值成功,因此上述内容不会添加任何内容。我们可以用array_key_exists
写一个非平凡的检查:
function get_with_default_v2($arr, $key, $defval)
{
return (array_key_exists($key, $arr) && !is_null($arr[$key]) ? $arr[$key] : $defval;
}
答案 1 :(得分:1)
你可以像这样单独传递数组和键:
function valueOrDefault($array, $key, $default) {
return isset($array[$key]) ? $array[$key] : $default;
}
$address = valueOrDefault($data, 'address', 'Address is not available.');
答案 2 :(得分:1)
function replace_null($value='', $replace='') {
if (!isset($value)) {
return $replace;
} else {
return $value;
}
}
尝试一下。它将使您可以调用带有或不带有参数的函数。
答案 3 :(得分:0)
<?
function replace_null($value, $replace) {
if(empty($value) && $value !== '0') {
return $replace;
} else {
return $value;
}
}
$address = replace_null("0", "replacing null");
echo $address;
?>
答案 4 :(得分:0)
我认为使用is_null
函数会更有用:
$address = $data['address'];
if ( is_null($address) ) $address = 'Address is not available.';
如果你真的想要这个功能:
function replace_null($value, $replace) {
if (is_null($value)) return $replace;
return $value;
}
$address = replace_null($data['address'], 'Address is not available.');
答案 5 :(得分:0)
如果你通过引用传递,PHP不会出错:
function Nz(&$var, $def='') {
return isset($var) ? $var : $def;
}
答案 6 :(得分:0)
如果声明变量,你会做一些像$ value?:$ replace