php查询过滤字段,php对结果集数组字段进行过滤的方法

给接口方返回数据的时候,经常被要求只返回需要的字段,于是自己写了两个方法分别用于过滤获取结果集中的不需要的字段,使用的过程中需要先定义一个过滤的key数组,然后调用对应的方法处理即可。

过滤单个结果集:

function filterResult(array &$result, array &$filter_key) {

if (!$result) {

return false;

}

$result = array_intersect_key($result, $filter_key);

foreach ($filter_key as $key => $value) {

if (is_array($value) && $value && !empty($result[$key])) {

if (count($result[$key]) != count($result[$key], 1)) {

if (is_numeric(key($value))) {

$result[$key] = array_column($result[$key], reset($value));

} else {

foreach ($result[$key] as &$_value) {

$_value = array_intersect_key($_value, $value);

}

}

} else {

$result[$key] = array_intersect_key($result[$key], $value);

}

}

}

}

过滤结果集数组:

function filterResultList(array &$result_list, array &$filter_key) {

if (!$result_list) {

return false;

}

foreach ($result_list as $key => &$result) {

filterResult($result, $filter_key);

}

}

例如返回的结果如下,这个结果比较粗糙:

{

"total": 1,

"per_page": "10",

"current_page": 1,

"last_page": 1,

"next_page_url": null,

"prev_page_url": null,

"from": 1,

"to": 1,

"data": [

{

"id": 9,

"rule_id": 1,

"sell_uid": 10001,

"seller_id": 1,

"serial_number_prefix": 10,

"serial_number": 10000009,

"cash_code": "fu35m9",

"used": 0,

"used_time": 0,

"order_code": "",

"ctime": "0",

"utime": "0",

"in_time": "0"

}

],

"errcode": 0,

"msg": "操作成功"

}

通过方法处理:

$filter_key = ['total' => '', 'data' => ['id' => '', 'serial_number' => '']];

filterResult($result, $filter_key);

得到的结果就比较简洁了,如下:

{

"total": 1,

"data": [

{

"id": 9,

"serial_number": 10000009

}

],

"errcode": 0,

"msg": "操作成功"

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值