2016-07-11 4 views
2

У меня есть массив, который я хочу добавить на него еще один массив. В настоящее время сервер (php) отвечает на этот массив как данные json. Вот образец.Добавить данные как массив

[{ 
"id":"11", 
"user_id":"8000", 
"product":"Shoes A", 
"quantity":"1", 
"date_open":"2015-01-04", 
"paid":"1", 
"harvested":"", 
"reinvest":null, 
"profit":null, 
"investment":"3000" 
}, 

{ 
"id":"12", 
"user_id":"8000", 
"product":"Shoes B", 
"quantity":"1", 
"date_open":"2015-03-01", 
"paid":"1", 
"harvested":"", 
"reinvest":null, 
"profit":200, 
"investment":"1500" 
}] 

Тогда код этого здесь.

$userid = $_POST['user']; 
$sql = "SELECT * FROM user_products WHERE uproducts_user_id = '{$userid}'"; 
$user_products = db::select($sql); 

    $product = array(); 
    foreach($user_products as $user_product){ 
     array_push($product, $user_product); 
    } 

    $server_msg = $product; 

echo json_encode($server_msg); 

Теперь я хочу добавить массив, который является суммой пользовательских запросов. Так что я имею в виду код будет выглядеть так:

$product = array(); 
$total_product= 0; 
foreach($user_products as $user_product){ 
    $total_product+= $user_product['investment']; // the sum of investment how to show this as an array? 

    array_push($product, $user_product); 

} 
$server_msg = $product; 

Таким образом, приведенный выше код, как я могу добиться этого, так что ответ сервера будет выглядеть так:

[{ 
"id":"11", 
"user_id":"8000", 
"product":"Shoes A", 
"quantity":"1", 
"date_open":"2015-01-04", 
"paid":"1", 
"harvested":"", 
"reinvest":null, 
"profit":null, 
"investment":"3000" 
}, 

{ 
"id":"12", 
"user_id":"8000", 
"product":"Shoes B", 
"quantity":"1", 
"date_open":"2015-03-01", 
"paid":"1", 
"harvested":"", 
"reinvest":null, 
"profit":200, 
"investment":"1500" 
}, 
{ 
"total_investment":"4500" // how can I add this here? 
}] 

ответ

2

Там много способов , но попробуйте это:

$server_msg = $product; 
array_push($server_msg, array('total_investment' => $total_product)); 

Это должно дать вам желаемый результат.

+0

Спасибо за помощь! @rexmac –

2

Если вы имеете дело с API (как это может показаться), я лучше предложить заново построить структуру вашего JSON в нечто вроде этого:

{ 
    "items": [{ 
    "id":"11", 
    "user_id":"8000", 
    "product":"Shoes A", 
    "quantity":"1", 
    "date_open":"2015-01-04", 
    "paid":"1", 
    "harvested":"", 
    "reinvest":null, 
    "profit":null, 
    "investment":"3000" 
    }, ....], 
    "total_investment": 45000 
} 

Чтобы ответить на ваш вопрос, @rexmac внушения это один из способов. Однако вы можете не смешивать свои поля ответа. Конечно, это некрасиво в стороне клиента, если вы в конечный итоге, как это: (Предполагается, что Javascript)

for (let i = 0; i < data.length; i++) { 
    if (typeof data[i].total_investment !== "undefined") { 
     totalInvestment = data[i].total_investment; 
     //.... 
    } 
    //.... 
} 

, но вместо этого (круче):

let totalInvestment = data.total_investment; 
for (let i = 0; i < data.items.length; i++) { 
    //.... 
} 

Надеется, что это помогает.

+0

Спасибо за идею! –

+0

ОП, я настоятельно рекомендую послушать рекомендации по реструктуризации вашего ответа JSON. Мой ответ должен дать вам результат, который вы просили, но я на 100% согласен с @Aldee, сохраняя ваши поля ответа раздельными, значительно облегчит обработку ответов. – rexmac

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