为了账号安全,请及时绑定邮箱和手机立即绑定

按键和值对 PHP 数组进行分组

按键和值对 PHP 数组进行分组

PHP
哔哔one 2021-10-08 21:20:22
我有一个这样的 PHP 数组,我想按 created_month 和 seq 对它们进行分组,我尝试过合并和其他方法,但它不起作用"data": [    {        "seq": "1",        "created_month": "Aug",        "descr": "[YOU] - Not Recieved",        "paydescr": "Revenue",        "amount": "205.85"    },    {        "seq": "1",        "created_month": "Jul",        "descr": "[YOU] - Not Recieved",        "paydescr": "Revenue",        "amount": "176.82"    },    {        "seq": "2",        "created_month": "Aug",        "descr": "[OT] - Not Recieved",        "paydescr": "Commission",        "amount": "74.19"    },    {        "seq": "2",        "created_month": "Jul",        "descr": "[OT] - Not Recieved",        "paydescr": "Commission",        "amount": "63.71"    }]并希望像这样显示它,这将按创建的月份和序列分组[{"data":[       {          "Aug":[             {       "1":[             {             "descr": "[YOU] - Not Received",            "paydescr": "Revenue",            "amount": "0.00"            }    ],    "2":[             {"descr": "[YOU] - Not Received",            "paydescr": "Revenue",            "amount": "0.00"            }     ]           }        ]     }  ]]]
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

使用 array_reduce 可以解决您的问题。


$data = '{"data": [{

    "seq": "1",

    "created_month": "Aug",

    "descr": "[YOU] - Not Recieved",

    "paydescr": "Revenue",

    "amount": "205.85"

}, {

    "seq": "1",

    "created_month": "Jul",

    "descr": "[YOU] - Not Recieved",

    "paydescr": "Revenue",

    "amount": "176.82"

}, {

    "seq": "2",

    "created_month": "Aug",

    "descr": "[OT] - Not Recieved",

    "paydescr": "Commission",

    "amount": "74.19"

}, {

    "seq": "2",

    "created_month": "Jul",

    "descr": "[OT] - Not Recieved",

    "paydescr": "Commission",

    "amount": "63.71"

}]}';


$data = json_decode($data, true);


$group = array_reduce($data['data'], function ($old, $new) {

    $key = "{$new['created_month']}_{$new['seq']}";

    unset($new['created_month'], $new['seq']);

    $old[$key][] = $new;


    return $old;

}, []);


print '<pre>';

print_r($group); // Ass array

print_r(json_encode($group)); // As JSON


查看完整回答
反对 回复 2021-10-08
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

使用这个 php 代码:


$data = '{"data": [{

    "seq": "1",

    "created_month": "Aug",

    "descr": "[YOU] - Not Recieved",

    "paydescr": "Revenue",

    "amount": "205.85"

}, {

    "seq": "1",

    "created_month": "Jul",

    "descr": "[YOU] - Not Recieved",

    "paydescr": "Revenue",

    "amount": "176.82"

}, {

    "seq": "2",

    "created_month": "Aug",

    "descr": "[OT] - Not Recieved",

    "paydescr": "Commission",

    "amount": "74.19"

}, {

    "seq": "2",

    "created_month": "Jul",

    "descr": "[OT] - Not Recieved",

    "paydescr": "Commission",

    "amount": "63.71"

}]}';


$data = json_decode($data, true);

$newArr = array();

foreach($data['data'] as $k=>$v){

    $newArr[$v['created_month']][$v['seq']][] = array("descr"=>$v['descr'],"paydescr"=>$v['paydescr'],"amount"=>$v['amount']);

}

echo json_encode($newArr);


查看完整回答
反对 回复 2021-10-08
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信