如何将数据添加到每个JSON对象PHP

时间:2016-03-21 14:22:40

标签: php mysql json

我从“帖子”中获取帖子详情'用PHP和JSON编码就像这样

$result_json = mysqli_fetch_all ($result, MYSQLI_ASSOC);
echo json_encode($result_json);

每个帖子都有唯一的ID

然后我又有一张名为' postsLikes'我想看一下使用mysqli_num_rows()

的帖子有多少赞

但我的问题是如何将它返回的数据添加到Encoded JSON中的每个对象?

$query_checkup = "SELECT * FROM postsTable WHERE Post_AgeFrom < $age AND $age < Post_AgeTo AND Post_Reviewed = 1";


$result=mysqli_query($con, $query_checkup);
$result_json = mysqli_fetch_all ($result, MYSQLI_ASSOC);

echo "{\"result\":";
echo json_encode($result_json);
echo "}";

3 个答案:

答案 0 :(得分:4)

在编码为json之前,您应该将额外的数据附加到数组中。

foreach ($result_json as $key => $result) {
    $result_json[$key]['likes'] = getLikes();
}
echo json_encode($result_json);

您需要根据需要实现getLikes函数,或者可以在foreach循环中执行操作。

需要注意的是:您需要查询每个产品才能获得喜欢。最好根据需要在循环中连接表格并格式化数组。

答案 1 :(得分:0)

也许您可以创建一个新数组并使用foreach结构添加以前的值和新值。

$new_array = array();

foreach($result_json as $result){
   $new_array[] = array(
      'id' => $result['id'],
      'likes' => getlikes($result['id'])
   );
}

function getlikes($id){
   // your code to get likes number with mysqli_num_rows()
}

echo json_encode($new_array);

答案 2 :(得分:0)

您应该加入原始查询中的'postsLikes'表,只需一次访问数据库即可获取所需的所有数据。

这样的事情: (猜猜你的桌子是如何设置的)

$query = "
SELECT 
  P.* ,
  L.Likes

FROM postsTable P
LEFT JOIN postsLikes L ON L.Post_id = P.Post_Id

WHERE 
  P.Post_AgeFrom < :age AND 
  :age < P.Post_AgeTo AND 
  P.Post_Reviewed = 1 ";

$params = array( "age" => $age );

$pdo = new PDO('mysql:dbname=testdb;host=127.0.0.1', $user, password);
$stmt = $pdo->prepare( $query );
$stmt->execute( $params );
$results = $stmt->fetchAll( PDO::FETCH_ASSOC );

$response = array( "results" => $results );
echo json_encode( $response );

其他建议:

1)使用绑定参数来防止SQL注入。

2)不要在响应中手动创建任何JSON,首先创建响应数组,让json_encode完成剩余的工作