2015-09-29 2 views
0

Я массив под названием $request следующим образом:Как изменить массив, чтобы сделать желаемый объект JSON в PHP?

Array 
(
    [invite_emails] => [email protected], [email protected] 
    [page_id] => 322 
    [ws_url] => http://app.knockknot.com/api/group/sendInvitation 
) 

После использования json_encode($request) я получил следующий вывод:

{ 
    "invite_emails": "[email protected], [email protected]", 
    "page_id": "322", 
    "ws_url": "http://app.knockknot.com/api/group/sendInvitation" 
} 

Но на самом деле я хочу, чтобы объект JSON следующим образом:

{ 
    "page_id": 322, 
    "invite_emails": [ 
    "[email protected]", 
    "[email protected]" 
    ], 
    "ws_url": "http://app.knockknot.com/api/group/sendInvitation" 
} 

Как мне манипулировать массивом в PHP, чтобы получить вышеуказанный объект JSON?

Пожалуйста, помогите мне.

+1

Показать свой PHP, создающий объект. –

+0

@ T.J.Crowder: $ request ['invite_emails'] = $ email_list; $ request ['page_id'] = $ pageId; $ request ['ws_url'] = $ this-> mWSBaseUrl.'group/sendInvitation '; – user2839497

+3

Чтобы улучшить вопрос, используйте ссылку «Изменить», а не комментарии. Проблема заключается в коде, который вы еще не указали: Как вы создаете '$ email_list'? * Это * то, что вы хотите исправить. –

ответ

2

Разделить список сообщений электронной почты с помощью запятой:

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

Эта запись:

[invite_emails] => [email protected], [email protected] 

должен быть массивом (в настоящее время, это строка) в PHP, то в формате JSON это будет выглядите так, как хотите.

+0

Хорошо заостренный, при этом слегка избыточный к вопросу ОП. Какое решение для этого? –

+0

Ну, я просто ответил на вопрос («Как мне манипулировать массивом в PHP, чтобы получить выделенный JSON-объект?»). Он должен изменить строку с массивом. Хорошо, было бы лучше знать, как создается эта запись массива «invite_emails». Тогда я могу ответить, как это сделать лучше. – Paladin

+0

Я не сомневаюсь, если это неправильно, но если это полезно. –

0

Использование PHP взорваться, например:

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

Чтобы избежать пробелов используйте preg_split (source):

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

ваш выход в конечном итоге с пространством в начале второго письма с этим – cmorrissey

+0

Такое решение * leviathanic * для небольшой проблемы, да? –

1

Я лично предпочитаю использовать функции обратного вызова для удобства чтения и возможностей. Для вашей цели, array_walk должны соответствовать:

<?php 
// reproducing array 
$request = array(
     "invite_emails" => "[email protected], [email protected]", 
     "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":[ 
     "[email protected]", 
     "[email protected]" 
    ], 
    "page_id":322, 
    "ws_url":"http://app.knockknot.com/api/group/sendInvitation" 
} 

Вы можете изменить поле, если ваши потребности изменения, и даже подавлять его можно использовать с любым полем из массив.

Смежные вопросы