【问题标题】:Checking if an attribute value is null or empty检查属性值是 null 还是空
【发布时间】:2014-07-10 03:51:54
【问题描述】:

我在 Oracle RightNow CRM 中使用 PHP 处理 JSON 数据时遇到问题。示例 json 包含在下面。当我尝试检查 if 条件时,“person.private_email”属性中包含的数据,只有在有一些数据时才会评估为 true。如果该属性没有数据,它什么也不做。我根本没有收到任何错误。 检查任何属性是否不包含数据的最佳方法是什么。

JSON

{
    "PERSON.PERSON_ID": 272839,
    "PERSON.Surname": "FirstName",
    "PERSON.Given_Names": "LastName",
    "PERSON.TITLE": "MR",
    "PERSON.BIRTH_DT": "10/JUL/14",
    "PERSON.GENDER": "M",
    "PERSON.CDU_EMAIL": "S272839@mydomain.com",
    "PERSON.PRIVATE_EMAIL": ""
}

PHP

self::$person=json_decode($json);

if (isset(self::$person->{'PERSON.PRIVATE_EMAIL'}) && !empty(self::$person->{'PERSON.PRIVATE_EMAIL'}))

【问题讨论】:

标签: php json rightnow-crm


【解决方案1】:

要检查它是否为空,isset() 就足够了,为了检查它是否为空,你最好 trim() 字符串,因为它删除了空格,如果你用@检查空,空格被算作字符987654323@函数。

$email = self::$person->{'PERSON.PRIVATE_EMAIL'};
if (isset($email) && trim($email) != '')
    echo "Contains data";

【讨论】:

    【解决方案2】:

    我认为你不能同时检查这两个检查 (&&),因为 isset() 将检查 PERSON.PRIVATE_EMAIL 是否在 JSON 数据中设置,否则如果它只是空白,那么 empty() 就足够了。

    也许应该把它分解成这样:

    $email = "";
    
    if (isset(self::$person->{'PERSON.PRIVATE_EMAIL'}))
    {
       if(!empty(self::$person->{'PERSON.PRIVATE_EMAIL'}))
       {
           $email = self::$person->{'PERSON.PRIVATE_EMAIL'};
       }
    else
    {
       //email is not set in the json data
       //do something
    }
    

    【讨论】:

      【解决方案3】:

      要检查对象中是否存在属性,您可以使用property_exists()

      if (property_exists(self::$person, 'PERSON.PRIVATE_EMAIL')) {
          // property exists
          $value = self::$person->{'PERSON.PRIVATE_EMAIL'};
      }
      

      请注意,即使属性是null,这也会产生true。要检查属性是否存在并且它不是null,请使用isset()

      if (isset(self::$person->{'PERSON.PRIVATE_EMAIL'})) {
          // property exists and is not null
      }
      

      要检查某物是否为空,最好定义空的含义;如果属性只能是字符串,则空定义可能类似于:

      if (strlen(trim($value))) {
          // string contains at least on non-space
      }
      

      【讨论】:

      • 嗨@jack,属性存在总是返回true。它不喜欢 strlen(trim(self::$person->{'PERSON.PRIVATE_EMAIL'})) :(。还是同样的问题
      • @BishnuPaudel “不喜欢”是什么意思?它返回 true 因为属性 ... 始终存在 :)
      • 我的意思是我仍然遇到问题中描述的原始问题。是的,该属性存在。我只是在确认这一点。
      • @BishnuPaudel 我认为您没有分享足够多的代码来真正了解发生了什么。您在问题中的条件在技术上是检查值是否为非空的有效方法......如果您想检查空值,您当然应该反转条件。
      • 我认为这个问题更具体到我的环境。我在 Oracle RigtNow CX 系统中使用它。感谢您的意见。谢谢,
      【解决方案4】:

      在您的示例代码中,您正在将 json 字符串解析为本地 $person 变量,而在您的条件中,您正在检查 $person... 的静态类属性。

      即,$person 与 self::$person 不同。除非您没有共享更多代码,否则这可能是您的问题。

      此代码适用于带有 CP2 的 RightNow CX。

          $json = '{
              "PERSON.PERSON_ID": 272839,
              "PERSON.Surname": "FirstName",
              "PERSON.Given_Names": "LastName",
              "PERSON.TITLE": "MR",
              "PERSON.BIRTH_DT": "10/JUL/14",
              "PERSON.GENDER": "M",
              "PERSON.CDU_EMAIL": "S272839@mydomain.com",
              "PERSON.PRIVATE_EMAIL": ""
          }';
      
          $person=json_decode($json);
      
          if(!empty($person->{'PERSON.PRIVATE_EMAIL'}))
          {
              echo "Not Empty";
          }
          else
          {
              echo "IS Empty";
          }
      

      【讨论】:

        猜你喜欢
        • 2011-06-30
        • 1970-01-01
        • 2018-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-09
        • 1970-01-01
        相关资源
        最近更新 更多