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

使用 Laravel 助手转换数据

使用 Laravel 助手转换数据

PHP
守着一只汪 2022-07-29 16:15:07
我有一个具有以下格式的数组:[  {    "stat_month": "01-2019",    "in_sum": 45443,    "out_sum": 42838,    "balance": 2605  },  {...}]但我想将这个数组转换为:[  "labels" => ["01-2019", "02-2019", "03-2019"],  "in_sum" => [45443, 60947, 56734],  "out_sum" => [42838, 42151, 75486],  "balance" => [2605, 18796, -18752]]任何想法如何通过收集帮助函数在一次操作中解决这个问题?
查看完整描述

3 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

查看 Laravel 集合中的 mapToGroups: https ://laravel.com/docs/5.8/collections#method-maptogroups


或这个解决方案:


$obj1 = new \stdClass;

$obj1->stat_month = "01-2019";

$obj1->in_sum = 45443;

$obj1->out_sum = 42838;

$obj1->balance = 2605;

$obj2 = new \stdClass;

$obj2->stat_month = "02-2019";

$obj2->in_sum = 55443;

$obj2->out_sum = 52838;

$obj2->balance = 3605;


$collection = collect([

    $obj1,$obj2

]);


$aResult = [

    'labels' => [],

    'in_sum' => [],

    'out_sum' => [],

    'balance' => []

];


$collection->each(function ($item, $key) use (&$aResult) {

    $aResult['labels'][] = $item->stat_month;

    $aResult['in_sum'][] = $item->in_sum;

    $aResult['out_sum'][] = $item->out_sum;

    $aResult['balance'][] = $item->balance;

});

结果:


array:4 [▼

  "labels" => array:2 [▼

    0 => "01-2019"

    1 => "02-2019"

  ]

  "in_sum" => array:2 [▼

    0 => 45443

    1 => 55443

  ]

  "out_sum" => array:2 [▼

    0 => 42838

    1 => 52838

  ]

  "balance" => array:2 [▼

    0 => 2605

    1 => 3605

  ]

]


查看完整回答
反对 回复 2022-07-29
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

你可以这样做是这样的php:


<?php


$array = '[

  {

    "stat_month": "01-2019",

    "in_sum": 45443,

    "out_sum": 42838,

    "balance": 2605

  },

  {

    "stat_month": "01-2019",

    "in_sum": 45443,

    "out_sum": 42838,

    "balance": 2605

  },

  {

    "stat_month": "01-2019",

    "in_sum": 45443,

    "out_sum": 42838,

    "balance": 2605

  }

]';


$array = json_decode($array, true);


$arrayResult = [

                'stat_month' => array_column($array, 'stat_month'), 

                'in_sum' => array_column($array, 'in_sum'), 

                'out_sum' => array_column($array, 'out_sum'), 

                'balance' => array_column($array, 'balance')

];


echo "<pre>";

print_r($arrayResult);

?>


查看完整回答
反对 回复 2022-07-29
?
跃然一笑

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

您可以使用简化的 array_map()并接收所需的输出:


$i = 0;

$tmp = ['labels'=>[],'in_sum'=>[],'out_sum'=>[],'balance'=>[]];


array_map(function($obj) use (&$tmp, $i){

    foreach($tmp as &$val){ 

       $val[] = array_values(((array)$obj))[$i]; 

       $i++;

    }

},$ar);

演示


或者只是简单的foreach loop:


$tmp = ['labels'=>[],'in_sum'=>[],'out_sum'=>[],'balance'=>[]];


foreach($ar as $obj) {

    $i = 0;

    foreach($tmp as &$val){ 

       $val[] = array_values(((array)$obj))[$i]; 

       $i++;

    }

演示2


你可以用 Laravel 的map()函数替换和重写这段代码。尝试使用动态循环而不是预定义对象的属性。


查看完整回答
反对 回复 2022-07-29
  • 3 回答
  • 0 关注
  • 111 浏览

添加回答

举报

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