首页 > 解决方案 > 在 PHP 中返回数组,用于 REST API 的 Symfony 4

问题描述

我在 symfony 4 中创建了我的 api 恢复,但是我返回的数组看起来不像我想要的那样。

下面我介绍我的代码,当前正在执行的结果,底部是我正在尝试做的结果。

我可以请人帮忙吗?我不完全确定如何达到这种效果。

这是我的服务 php:

$data = $repository->findByData($fromDate, $toDate);

        $i = 1;
        $j = 1;

        $resultArray = [];

        foreach ($data as $key => $d) {
            $date = $d['date'];
            $dateString = $date->format('Y-m-d');
            $resultIteration[$key] = [

                    'customerID' => $d['id'],
                    'customerName' => $d['customerName'],
                    'data' => [
                        'ordersAmount' . $i++ => $d['ordersAmount'],
                        'earnings' . $i++ => $d['earnings'],
                        'date' => $dateString,
                    ],
                    'ordersAmount' . $j++ => $d['ordersAmount'],
                    'earnings' . $j++ => $d['earnings'],

            ];

            array_push($resultArray,$resultIteration[$key]);

        }

return $resultArray;

当前结果:

[
    {
        "customerID": 1,
        "customerName": "Client1",
        "data": {
            "ordersAmount1": 10,
            "earnings2": 882.53,
            "date": "2019-02-21"
        },
        "ordersAmount1": 10,
        "earnings2": 882.53
    },
    {
        "customerID": 1,
        "customerName": "Client1",
        "data": {
            "ordersAmount3": 18,
            "earnings4": 21,
            "date": "2019-02-20"
        },
        "ordersAmount3": 18,
        "earnings4": 21
    },
    {
        "customerID": 2,
        "customerName": "Client2",
        "data": {
            "ordersAmount5": 43,
            "earnings6": 11,
            "date": "2019-02-21"
        },
        "ordersAmount5": 43,
        "earnings6": 11
    },
    {
        "customerID": 2,
        "customerName": "Client2",
        "data": {
            "ordersAmount7": 21,
            "earnings8": 41,
            "date": "2019-02-20"
        },
        "ordersAmount7": 21,
        "earnings8": 41
    }
]

我想要这个结果:

[
    {
      customerID: 1,
      customerName: "Client1",
      data: [
        {
          date: "2019-02-20"
        },
        {
          date: "2019-02-21"
        }
      ],
       ordersAmount1: 12,
       earnings2: 3333,
       ordersAmount3: 1,
       earnings4: 2,
    },
    {
      customerID: 2,
      customerName: "Client2",
      data: [
        {
          date: "2019-02-20"
        },
          date: "2019-02-21"
        }
      ],
      ordersAmount1: 3112,
      earnings2: 44,
      ordersAmount3: 121,
      earnings4: 2543,
    }
  ],

编辑:这是我的 $data:

[
    {
        "date": "2019-02-21T00:00:00+01:00",
        "ordersAmount": 10,
        "earnings": 882.53,
        "id": 1,
        "customerName": "Client1"
    },
    {
        "date": "2019-02-20T00:00:00+01:00",
        "ordersAmount": 18,
        "earnings": 21,
        "id": 1,
        "customerName": "Client1"
    },
    {
        "date": "2019-02-21T00:00:00+01:00",
        "ordersAmount": 43,
        "earnings": 11,
        "id": 2,
        "customerName": "Client2"
    },
    {
        "date": "2019-02-20T00:00:00+01:00",
        "ordersAmount": 21,
        "earnings": 41,
        "id": 2,
        "customerName": "Client2"
    }
]

标签: phparrays

解决方案


看下面的代码,它会解决你的问题

$data = $repository->findByData($fromDate, $toDate);

// define $resultIteration array
$resultIteration = [];
foreach ($data as $key => $d) {
    $i = 1;
    $date = $d['date'];

    //$dateString = $date->format('Y-m-d');
    $dateString = date('Y-m-d', strtotime($date));

    $resultIteration[$key] = [
        'customerID' => $d['id'],
        'customerName' => $d['customerName'],
        'data' => [
            [
                'date' => $dateString,
            ], [
                'date' => $dateString
            ]
        ],
        'ordersAmount' . $i++ => $d['ordersAmount'],
        'earnings' . $i++ => $d['earnings'],
        'ordersAmount' . $i++ => $d['ordersAmount'],
        'earnings' . $i++ => $d['earnings'],
    ];

    // REMOVE THIS LINE
    //array_push($resultArray,$resultIteration[$key]);
}

// RETURN $resultIteration in response
return $resultIteration;

推荐阅读