在应用程序的visual basic中有一个名为Nz((的函数。该函数检查变量null,如果发现变量为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((相同的功能?任何建议都将不胜感激。
提前谢谢。
有点迂回:如果你只使用它来检查数组成员,你可以单独传递密钥:
function get_with_default($arr, $key, $defval)
{
return isset($arr[$key]) ? $arr[$key] : $defval;
}
如果变量可以设置但为空(编辑:,但它不能,谢谢@decze(,请添加另一个检查:
function get_and_coalesce_with_default($arr, $key, $defval)
{
return (isset($arr[$key]) && !is_null($arr[$key]) ? $arr[$key] : $defval;
}
如前所述,isset()
只在非null值上成功,因此上面没有添加任何内容。不过,我们可以用array_key_exists
编写一个非平凡的检查:
function get_with_default_v2($arr, $key, $defval)
{
return (array_key_exists($key, $arr) && !is_null($arr[$key]) ? $arr[$key] : $defval;
}
您可以像这样分别传递数组和密钥:
function valueOrDefault($array, $key, $default) {
return isset($array[$key]) ? $array[$key] : $default;
}
$address = valueOrDefault($data, 'address', 'Address is not available.');
如果通过引用,PHP不会出错:
function Nz(&$var, $def='') {
return isset($var) ? $var : $def;
}
http://php.net/manual/en/language.references.pass.php
如果声明了变量,则执行类似$value?的操作:$替换
function replace_null($value='', $replace='') {
if (!isset($value)) {
return $replace;
} else {
return $value;
}
}
试试这个。它将允许您调用带有或不带有传递参数的函数。
<?
function replace_null($value, $replace) {
if(empty($value) && $value !== '0') {
return $replace;
} else {
return $value;
}
}
$address = replace_null("0", "replacing null");
echo $address;
?>
我认为使用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.');