Как манипулировать массивом, чтобы он возвращался как структура json в PHP?

Я пытаюсь перебрать объект json и вставить выбранные значения в массив.

$json = '
{
"canonicalUrl": "/v1/products(offers.type=deal_of_the_day)?format=json&apiKey=946n9vuhdkgeyz2qx2dpxd54",
"currentPage": 1,
"from": 1,
"partial": false,
"products": [
{
"active": true,
"activeUpdateDate": "2014-11-03T19:43:46",
"lowPriceGuarantee": true,
"name": "LG - 1.1 Cu. Ft. Mid-Size Microwave - Black",
"new": false,
"onSale": true,
"productId": 1219180376135,
"regularPrice": 124.99,
"salePrice": 99.99,
"sku": 5998225,
"source": "bestbuy",
"startDate": "2014-07-06",
"type": "HardGood"},
{
"active": true,
"activeUpdateDate": "2014-11-03T18:03:02",
"lowPriceGuarantee": false,
"name": "Rocketfish In-Wall HDMI Cable",
"new": false,
"onSale": true,
"productId": 1218343205770,
"regularPrice": 29.99,
"salePrice": 24.99,
"sku": 2634897,
"source": "bestbuy",
"startDate": "2011-08-14",
"type": "HardGood"}
],
"queryTime": "0.004",
"to": 2,
"total": 2,
"totalPages": 1,
"totalTime": "0.020"}

';

$json_output = json_decode($json);
$pBB = array("title" => array(), "type" => array());
foreach($json_output->products as $obj){
array_push($pBB['title']," {$obj->name}");
array_push($pBB['type']," {$obj->type}" );

}
echo  json_encode($pBB);

вывод кода выше

{
"title": [
" LG - 1.1 Cu. Ft. Mid-Size Microwave - Black",
" Rocketfish In-Wall HDMI Cable"],
"type": [
" HardGood",
" HardGood"]
}

я хочу вернуть его, как показано ниже

[
{
"title": "LG - 1.1 Cu. Ft. Mid-Size Microwave - Black",
"type": "HardGood"},
{
"title": " Rocketfish In-Wall HDMI Cable",
"type":  " HardGood"}
]

Какие-нибудь мысли?

0

Решение

Согласно мой комментарий к вашему вопросу, Вы использовали нетрадиционный метод организации ваших продуктов в ценности, где вместо этого вы должны организовывать каждый продукт в отдельный массив для каждого продукта, содержащего его название и тип. Используйте это вместо:

$json_output = json_decode($json);
$pBB = array();
foreach($json_output->products as $obj){
$pBB[] = array(
'title' => " {$obj->name}", // Not sure why you're using " {$obj->name}" but I preserved it
'type' => " {$obj->type}", // You could just use $obj->type directly
);
}
echo  json_encode(array_values($pBB));
1

Другие решения

$json_output = json_decode($json);
$pBB = array();
foreach($json_output->products as $obj){
array_push($pBB, array(
'title' => " {$obj->name}",
'type' => " {$obj->type}"));
}
echo  json_encode(array_values($pBB));
1

Попробуй это! вам нужно создать объект и вставить в массив.

$json = ' { "from": 1, "to": 2, "total": 2, "currentPage": 1, "totalPages": 1, "queryTime": "0.004", "totalTime": "0.020", "partial": false, "canonicalUrl": "/v1/products(offers.type=deal_of_the_day)?format=json&apiKey=946n9vuhdkgeyz2qx2dpxd54","products": [ { "sku": 5998225, "productId": 1219180376135, "name": "LG - 1.1 Cu. Ft. Mid-Size Microwave - Black", "source": "bestbuy", "type": "HardGood", "startDate": "2014-07-06","new": false, "active": true, "lowPriceGuarantee": true, "activeUpdateDate": "2014-11-03T19:43:46", "regularPrice": 124.99, "salePrice": 99.99, "onSale": true},{ "sku": 2634897, "productId": 1218343205770, "name": "Rocketfish In-Wall HDMI Cable", "source": "bestbuy", "type": "HardGood", "startDate": "2011-08-14", "new": false, "active": true,"lowPriceGuarantee": false, "activeUpdateDate": "2014-11-03T18:03:02", "regularPrice": 29.99, "salePrice": 24.99, "onSale": true } ] }';

$json_output = json_decode($json);
foreach($json_output->products as $obj){
$new_obj = new stdClass();
$new_obj->title = $obj->name;
$new_obj->type = $obj->type;
$pBB[]= $new_obj;
}
echo  json_encode($pBB);
1

Произошла ошибка при создании объекта JSON. На самом деле строка, которую вы передаете в функцию json_decode, в порядке, но проблема возникает при построении объекта JSON из массива.

не использовать

$ pBB = array («title» => array (), «type» => array ());

вместо этого попробуйте

$ pBB = array (array («title» => $ title, «type» => $ type));

Когда вы кодируете $ pBB в Json, я думаю, это даст вам точный результат.

Удачного кодирования.
Атула

0
echo  json_encode($pBB);

Вы должны убедиться, что это может быть массив для JS (т.е. последовательная нумерация)

Замените вышеуказанную строку на

echo  json_encode(array_values($pBB));

Чтобы все заработало как положено

значения массива возвращают последовательные целые числа в качестве ключей

0
По вопросам рекламы [email protected]