Преобразовать объект в ассоциативный массив в Laravel - PullRequest
0 голосов
/ 27 марта 2019

Я вызываю API для получения следующего ответа объекта:

+"284": "Khaki's with Black polo shirt (no logo)"
+"286": "Black pants with Yellow shirt"
+"349": "Black pants with white collared shirt"
+"705": "See "Details" Section for Dress Attire"

Я хочу преобразовать этот объект в ассоциативный массив, но у меня возникли некоторые проблемы.

Вот что яхочу:

[
    0 => ["id" => "284", "name" => "Khaki's with Black polo shirt (no logo)"],
    1 => ["id" => "286", "name" => "Black pants with Yellow shirt"],
    2 => ["id" => "349", "name" => "Black pants with white collared shirt"],
    3 => ["id" => "705", "name" => "See "Details" Section for Dress Attire"]
]

Или даже это:

[
    "284" => "Khaki's with Black polo shirt (no logo)"
    "286" => "Black pants with Yellow shirt"
    "349" => "Black pants with white collared shirt"
    "705" => "See "Details" Section for Dress Attire"
]

Любой из них приемлем для меня.

Я пытаюсь сделать collect($response->result->attire)->toArray(), но это, очевидно, простодает мне список имен:

array:4 [
  0 => "Khaki's with Black polo shirt (no logo)"
  1 => "Black pants with Yellow shirt"
  2 => "Black pants with white collared shirt"
  3 => "See "Details" Section for Dress Attire"
]

Я попытался использовать mapWithKeys безуспешно.

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

В Laravel вы можете использовать вспомогательные функции Laravel Collection.Вот пример для этого: -

$arr = [
    "284" =>  "Khaki's with Black polo shirt (no logo)",
    "286" => "Black pants with Yellow shirt",
    "349" => "Black pants with white collared shirt",
    "705" => "See 'Details' Section for Dress Attire"
];
$collection = collect($arr);
$multiplied = $collection->map(function ($name, $key) {
    return [
        "id" => $key,
        "name" => $name
    ];
});
dd($multiplied->values()->toArray());

Я думаю, что это поможет вам.

0 голосов
/ 27 марта 2019

Предполагая, что ваш ответ является ответом json, как в этом примере.

$response = response()->json(['id' => 'string', 'id2' => 'string2']);
$response->getContent();

Создает строку json, аналогичную той, которую я предполагаю, что вы получаете от API:

"{"id":"string", "id2":"string2"}"

ипоэтому:

(array) json_decode($response->getContent());

возвращает:

[
    "id" => "string",
    "id2" => "string2",
]

Что я думаю, это то, что вы хотели.В вашем случае, не просматривая весь ответ json, но основываясь на написанном вами примере, я думаю, что это будет выглядеть так:

(array) json_decode($response->getContent()->result->attire);
...