如何更改数组以便在 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"
}
如果您的需要发生变化,您可以随意更改该字段,甚至可以禁止它与数组的任何字段一起使用。
我有一个名为 $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"
}
如果您的需要发生变化,您可以随意更改该字段,甚至可以禁止它与数组的任何字段一起使用。