foreachloop中的数组返回额外的空值

时间:2017-02-08 02:01:24

标签: php json

我在php中有问题。 所以,我有一个json数据,我将解码并放入对象 然后,我将使用foreach函数获取参数。 我将它放到一个数组中,所以我可以在循环之外调用它。 但是,当我显示结果时,它会返回一个额外的空值,如下所示:

[{"mobile":"639179512744"},{"mobile":"639054971214"}, {"mobile":"639394297841"},{"mobile":"639296378818"},{"mobile":"639265161309"},{"mobile":null}]

不应包括最后一条记录。我只有5条手机记录。

这是我的代码:

$data = file_get_contents("php://input");
$data = (object)json_decode($data);
$model = $data->data;
$model = json_encode($model);
$model = json_decode($model);
$model = (object)$model;
foreach($model AS $row){
  $mobile = $row->mobile_number;
   $array[] = array(
          'mobile'=>$mobile
    );

}

echo json_encode($array);

以下是数据:

{"action":"upload","data":[{"mobile_number":"639179512744","sentdt":"2017-    02-07 00:21:57","imsi":"","remarks":"ACTIVE"},    {"mobile_number":"639054971214","sentdt":"2017-02-07     00:21:57","imsi":"","remarks":"ACTIVE"},    {"mobile_number":"639394297841","sentdt":"2017-02-07     00:21:57","imsi":"","remarks":"Absent Subscriber - No International Mobile     Subscriber Identity"},{"mobile_number":"639296378818","sentdt":"2017-02-07  00:21:58","imsi":"","remarks":"Absent Subscriber - No International Mobile  Subscriber Identity"},{"mobile_number":"639265161309","sentdt":"2017-02-07  00:21:58","imsi":"","remarks":"ACTIVE"},{}]}

有人可以提供帮助吗?我想摆脱额外的空值 感谢

3 个答案:

答案 0 :(得分:2)

您可以尝试进行空检查,如下所示:

foreach($model as $row){
  if (!is_null($row->mobile_number)) {
    $array[] = array(
      'mobile'=> $row->mobile_number;
    );
  }
}

另请注意,没有理由将$ row-> mobile_number缓存到变量中,只需将其直接传递给数组。

答案 1 :(得分:1)

这将解决您的问题。

foreach($model AS $row){
  $mobile = $row->mobile_number;

  if(!empty($mobile) && isset($mobile)){      
     $array[] = array(
          'mobile'=>$mobile
     );
  }
}

答案 2 :(得分:0)

您的数据结尾是:

...ACTIVE"},{}]}

当数据被解码时,最后一个数组值是空对象,这意味着数组值的最后一个不具有mobile_number的成员变量,因此执行$row->mobile_number;可以获得null的值,和PHP错误报告将同时报告E_NOTICE错误。

您可以使用函数is_null()来过滤空值,但您应该同时检查数据源。