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


How to add a data to each JSON object PHP

我用php从'postsTable'获取帖子详细信息,并像这样用JSON编码

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

每个帖子都有一个唯一的 ID

然后我有另一个名为"帖子喜欢"的表,我想看看帖子使用 mysqli_num_rows() 有多少个赞

但我的问题是如何将它返回的数据添加到编码的 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 "}";

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

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

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

您需要

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

也许您可以创建一个新数组并使用 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);

您应该在原始查询中加入"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完成其余的工作