繁体   English   中英

php null替换函数

[英]php null replacement function

在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()相同的功能吗? 任何建议将不胜感激。

提前致谢。

有点迂回:如果您只使用它来检查数组成员,您可以单独传递密钥:

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()仅在非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.');

我认为使用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.');

如果您通过引用传递,PHP将不会出错:

function Nz(&$var, $def='') {
    return isset($var) ? $var : $def;
}

http://php.net/manual/en/language.references.pass.php

如果声明变量,你会做一些像$ value?:$ replace

<?
function replace_null($value, $replace) {
    if(empty($value) && $value !== '0') {
        return $replace;
    } else {
        return $value;
    }
}

$address = replace_null("0", "replacing null");
echo $address;
?> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM