使用带有PHP

时间:2017-04-27 14:44:14

标签: php arrays json nested

我从API调用中获取了一些数据,并尝试构建一个JSON以将其发送回另一个API。

最终的JSON必须如下所示:

{
    "jobs": {
        "MP_OFFER_ID_1": {
            "job_id": "jobboard_reference_1",
            "url": "url_1",    
            "status": 0
        },
        "MP_OFFER_ID_2": {
            "job_id": "job_id_2",
            "url": "url_2",
            "status": 1
        },
    }
}

因此,在jobs键下,它不是元素数组,而是具有唯一键的元素列表。

这就是我遇到的麻烦。

我要解析的数据是一个如下结构的数组:

Array(
    [0] => Array(
        [link] => some-url
        [id] => 18790674
        [ref] => 0015909-18790674
    )
    // ...
);

link必须放在JSON的url键中。

id是JSON密钥,在示例中MP_OFFER_ID_1

ref必须放在job_id

我实际上最后有这个JSON:

{
    "jobs": [
        [
            {
                "18790674": {
                    "job_id": "0015909-18790674",
                    "url": "test",
                    "status": 1
                }
            },
            {
                "18790678": {
                    "job_id": "0015892-18790678",
                    "url": "test",
                    "status": 1
                }
            }
        ]
    ]
}

正如您所看到的,jobs是一个数组(实际上它是一个数组^^的数组)并且这不是我想要的...

1 个答案:

答案 0 :(得分:1)

我想出了这一点,但很难从有限的信息中理解你想要的是什么:

<?php
$input = [
  [
    'id' => 18790674,
    'link' => 'some-url',
    'ref' => '0015909-18790674',
  ],
  [
    'id' => 18790678,
    'link' => 'another-url',
    'ref' => '0015909-18790678',
  ],
];

$output = new stdClass();

foreach ($input as $arr) {
  $obj = new stdClass();

  $key = $arr['id'];
  $obj->job_id = $arr['id'];
  $obj->url = $arr['link'];
  $obj->status = '1'; // ?

  $output->{$key} = $obj;

}

echo json_encode($output, JSON_PRETTY_PRINT);

输出:

{
    "18790674": {
        "job_id": 18790674,
        "url": "some-url",
        "status": "1"
    },
    "18790678": {
        "job_id": 18790678,
        "url": "another-url",
        "status": "1"
    }
}