如何更改数组以便在 PHP 中创建所需的 JSON 对象?

How to change the array in order to make the desired JSON object in PHP?

我有一个名为 $request 的数组,如下所示:

Array
(
    [invite_emails] => suka@gmail.com, swat@gmail.com
    [page_id] => 322
    [ws_url] => http://app.knockknot.com/api/group/sendInvitation
)

使用 json_encode($request) 后,我得到以下输出:

{
  "invite_emails": "suka@gmail.com, swat@gmail.com",
  "page_id": "322",
  "ws_url": "http://app.knockknot.com/api/group/sendInvitation"
}

但实际上我想要 JSON 对象如下:

{
  "page_id": 322,
  "invite_emails": [
    "suka@gmail.com",
    "swat@gmail.com"
  ],
  "ws_url": "http://app.knockknot.com/api/group/sendInvitation"
}

我应该如何操作 PHP 中的数组以获得上述所需的 JSON 对象?

请有人帮助我。

使用逗号分隔电子邮件列表:

$array["invite_emails"] = preg_split("#\s*,\s*#", $array["invite_emails"]);

此项:

[invite_emails] => suka@gmail.com, swat@gmail.com

在PHP中应该是一个数组(目前是一个字符串),然后在JSON中它看起来就像你想要的那样。

使用PHP explode 例如:

$array['invite_emails'] = explode(',',$array['invite_emails']);

要避免空格,请使用 preg_split (source):

$array['invite_emails'] = preg_split("/[\s,]+/", $array['invite_emails']);

我个人更喜欢使用回调函数来提高可读性和可能性。为了您的目的,array_walk 应该适合:

<?php
// reproducing array
$request = array(
        "invite_emails" => "suka@gmail.com, swat@gmail.com",
        "page_id" => 322,
        "ws_url" => "http://app.knockknot.com/api/group/sendInvitation"
);

// callback finds a comma-separated string and explodes it...
array_walk($request, function (&$v,$k) {if ($k == 'invite_emails') $v = explode(", ", $v);});
// ... and then encode it to JSON
json_encode($request);

// testing
print_r($request);

输出:

{
  "invite_emails":[
      "suka@gmail.com",
      "swat@gmail.com"
  ],
  "page_id":322,
  "ws_url":"http://app.knockknot.com/api/group/sendInvitation"
}

如果您的需要发生变化,您可以随意更改该字段,甚至可以禁止它与数组的任何字段一起使用。