【问题标题】:php null replacement functionphp空值替换功能
【发布时间】:2011-08-18 02:45:58
【问题描述】:

Visual Basic 中有一个名为 Nz() 的函数用于应用程序。该函数检查变量是否为空,如果发现变量为空,则返回一个提供的值。

我尝试在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']为空,php将停止执行代码,replace_null也不会被调用。

我目前正在使用三进制

(isset(data['address']) ? data['address'] : 'Address is not available.');

但我认为replace_null,如果可行,将提供更方便的方式。

php 中是否有提供与 vba 的 Nz() 相同功能的函数? 任何建议将不胜感激。

提前致谢。

【问题讨论】:

  • 请注意,值为null 的变量和不存在的变量是两个不同的东西。试试这个:$foo = null; echo $foo; echo $bar;
  • 我真的很惊讶,一直以来我都认为它们是一样的。就我而言,空变量不是我要检查的唯一变量,而且不存在。谢谢你的信息。

标签: php string null replace


【解决方案1】:

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

function get_with_default($arr, $key, $defval)
{
  return isset($arr[$key]) ? $arr[$key] : $defval;
}

如果变量可以设置但为空(编辑:它不能设置,感谢@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;
}

【讨论】:

  • 如果变量isset,那么它也不是nullissetnull 值返回 false
  • @deceze:哦,好的。在这种情况下,您不需要第二个版本。那么设置为null 的变量是否与语言中不存在的变量完全无法区分(即不允许通过导致错误进行测试)?
  • 不幸的是,是的。值null 的变量和不存在的变量 无法在不引起警告的情况下进行区分。对于数组,您可以使用array_key_exists,返回true,即使是null 值。
  • @deceze:哦,对于目前的解决方法,数组查找可能更好 - 让我编辑它!嗯,也许可以使用异常处理来跟踪非法访问,即调用一个虚拟函数并查看调用是否因为参数不是变量而失败......
  • 警告也不例外。真的,不要把这个基本的事情复杂化。如果您正在访问不存在的变量,您应该收到警告,因为您的逻辑有问题。
【解决方案2】:

你可以像这样分别传递数组和键:

function valueOrDefault($array, $key, $default) {
    return isset($array[$key]) ? $array[$key] : $default;
}

$address = valueOrDefault($data, 'address', 'Address is not available.');

【讨论】:

    【解决方案3】:

    如果通过引用传递,PHP 不会报错:

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

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

    【讨论】:

      【解决方案4】:
      function replace_null($value='', $replace='') {
          if (!isset($value)) {
              return $replace;
          } else {
              return $value;
          }
      }
      

      试试这个。它将允许您在传递或不传递参数的情况下调用函数。

      【讨论】:

        【解决方案5】:
        <?
        function replace_null($value, $replace) {
            if(empty($value) && $value !== '0') {
                return $replace;
            } else {
                return $value;
            }
        }
        
        $address = replace_null("0", "replacing null");
        echo $address;
        ?> 
        

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            如果变量被声明,你会做类似 $value?:$replace

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-01-05
              • 2013-12-08
              • 2021-11-09
              • 2019-08-17
              • 2013-05-18
              • 2015-04-14
              • 1970-01-01
              相关资源
              最近更新 更多