【问题标题】:How to count the number of elements present in a JSON object? [duplicate]如何计算 JSON 对象中存在的元素数量? [复制]
【发布时间】:2020-09-16 20:52:18
【问题描述】:

我有一个如下所示的 PHP/JSON。

JSON:

{"posts_id_en":"101, 102, 103","posts_id_fr":"", "reports_id_en":"101, 102", "reports_id_fr":"101"}

PHP 代码:

echo count(explode(",", $data->posts_id_en));    //  Line A  (3)

echo count(explode(",", $data->posts_id_fr));    // Line B   (1)

echo count(explode(",", $data->reports_id_en));    // Line C  (2)

echo count(explode(",", $data->reports_id_fr));    // Line D  (1)

A 行 php 代码、C 行 php 代码和 D 行 php 代码打印 321

问题陈述:

我想知道我需要在上面 B 行的 php 代码中进行哪些更改,以便它打印 0,因为 posts_id_fr 内没有元素

【问题讨论】:

  • 我们在表单中输入的任何值都会存储在 JSON 中。我不允许更改 JSON 的结构。如果您需要更多信息,请告诉我。
  • 这似乎是在循环中做的最完美的事情。

标签: php json count explode


【解决方案1】:

您只需要确保该数组中没有空值。因为当空字符串被分解时,它会创建一个值为空白的元素。

使用array_filter删除这些值

echo count(array_filter(explode(",", $data->posts_id_fr)));

// Will print 0

以防万一您想按照GrumpyCrouton的建议进行循环

foreach($data as $key => $value)
{
  echo $key . ' : ' . count(array_filter(explode(",", $value))) . PHP_EOL;
}

Output:
posts_id_en : 3
posts_id_fr : 0 
reports_id_en: 2
reports_id_fr: 1

【讨论】:

    【解决方案2】:

    在尝试使用该值之前,您必须检查该值是否已设置

    $str = '{"posts_id_en":"101, 102, 103","posts_id_fr":"", "reports_id_en":"101, 102", "reports_id_fr":"101"}';
    
    $obj = json_decode($str);
    
    foreach ( $obj as $o=>$v) {
        echo $o . ' ';
        echo strlen($v) > 0 ? count(explode(",", $v)) : 0 ;
        echo PHP_EOL;
    }
    
    

    结果

    posts_id_en 3
    posts_id_fr 0
    reports_id_en 2
    reports_id_fr 1
    

    【讨论】:

      【解决方案3】:

      这里略有不同,您可以使用 preg_split 并使用标志来忽略空拆分。在这里,我们在非数字上进行拆分。

      <?php
      
      $str = '{"posts_id_en":"101, 102, 103","posts_id_fr":"", "reports_id_en":"101, 102", "reports_id_fr":"101"}';
      $arr = json_decode($str, true);
      
      $arr = array_map(function($item) {
          $nums = preg_split('/[^0-9]/', $item, -1, PREG_SPLIT_NO_EMPTY);
      
          return $nums;
      }, $arr);
      
      var_export($arr);
      
      $arr = array_map('count', $arr);
      
      var_export($arr);
      

      输出:

      array (
        'posts_id_en' => 
        array (
          0 => '101',
          1 => '102',
          2 => '103',
        ),
        'posts_id_fr' => 
        array (
        ),
        'reports_id_en' => 
        array (
          0 => '101',
          1 => '102',
        ),
        'reports_id_fr' => 
        array (
          0 => '101',
        ),
      )array (
        'posts_id_en' => 3,
        'posts_id_fr' => 0,
        'reports_id_en' => 2,
        'reports_id_fr' => 1,
      )
      

      包含中间步骤,因此您可以看到 preg_split 的结果。

      【讨论】:

        【解决方案4】:
        echo count(preg_split("/,/", $data->posts_id_fr,-1, PREG_SPLIT_NO_EMPTY)); 
        

        【讨论】:

          猜你喜欢
          • 2014-09-18
          • 2014-11-05
          • 2018-12-27
          • 1970-01-01
          • 2020-04-27
          • 2020-07-23
          • 1970-01-01
          • 1970-01-01
          • 2015-10-31
          相关资源
          最近更新 更多