php对象转数组去除空数组,在PHP中从数组中删除空的stdclass对象

我在PHP中有以下示例数据:

[{"id": 2088996538},{},{"id": 2077495673}]

我怎么能最终得到

[{"id": 2088996538},{"id": 2077495673}]

我尝试了几件事,比如

unset($activities[1]);

但后来我结束了

{"0":{"id":2088996538},"2":{"id":2077495673}}

它看起来很简单,但无法搞清楚.

最终目标是清理一些strava api输出,删除我不使用的所有内容.

编辑:

$activities = json_decode('[{"id": 2088996538},{},{"id": 2077495673}]');

unset($activities[1]);

$activities = array_values($activities);

echo json_encode($activities);

这实际上有效,我怎么能错过它.用更大的数据集来试试吧.谢谢!

解决方法:

您可以过滤掉空对象.

$data = array_values(array_filter($data, function($item) {

return (bool) (array) $item;

}));

array_values是必要的,以防止你得到的{“0”:{“id”:2088996538},“2”:{“id”:2077495673}}形式,因为它重新索引数组.

回调中的中间转换为数组是必要的,因为任何对象的计算结果为true,无论它是否为空,但空数组的计算结果为false.如果通过将json_decode的第二个参数设置为true来解码为数组而不是对象,则不需要该转换.

与原始问题没有直接关系,但是这是我建议的另一种方法,从API的数据开始:

$activities = json_decode($json, true);

$set_keys = array_flip(["start_latlng", "id", "start_date","name"]);

foreach ($activities as $activity) {

if (!is_null($activity['start_latlng'])) {

$result[] = array_intersect_key($activity, $set_keys);

}

}

echo json_encode($result);

标签:php,object,arrays,stdclass

来源: https://codeday.me/bug/20190722/1499878.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值