问题描述
JSON:
{"posts_id_en":"101,102,103","posts_id_fr":"","reports_id_en":"101,102","reports_id_fr":"101"}
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代码分别打印3
,2
和1
。
问题陈述:
我想知道我需要在上面的B行的PHP代码中进行哪些更改,以便在posts_id_fr
中没有元素的情况下将其打印为0
解决方法
您只需要确保该数组内没有空值即可。因为当空字符串爆炸时,它将创建一个值为空的元素。
使用OUTPUT:
Before Insertion: 4,5
After Insertion: 4,2,5,7
array_filter
以防万一,您想按照echo count(array_filter(explode(",",$data->posts_id_fr)));
// Will print 0
的建议进行遍历
GrumpyCrouton
,
在尝试使用该值之前,您必须检查该值是否已设置
$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
,
此处略有变化,您可以使用preg_split并使用标志来忽略空拆分。在这里,我们将数字拆分。
<?php
$str = '{"posts_id_en":"101,"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','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的结果。
,echo count(preg_split("/,/",$data->posts_id_fr,PREG_SPLIT_NO_EMPTY));