【问题标题】:Create dynamic JSON array in php在 php 中创建动态 JSON 数组
【发布时间】:2020-12-05 18:59:25
【问题描述】:

我想像这样动态创建一个 JSON:

{
"storie":[
{
"story_id":"111",
"username":"Username1",
"profile_photo":"boh.png",
"copertina":"ok.png",
"num_elements":"1",
"rating":"4.5"
},
{
"story_id":"222",
"username":"Username2",
"profile_photo":"hello.png",
"copertina":"hi.png",
"num_elements":"2",
"rating":"3.5"
}
]
}

我正在尝试从 MySQL 数据库中获取值,并且我能够做到:

$response = array();
$sql = mysqli_query($conn, "SELECT * FROM storie WHERE userid IN (SELECT following FROM follow WHERE follower='$userid')");
while($row = mysqli_fetch_assoc($sql)){
  $usern = getuserinfo($row['userid'], "username", $conn);
  $prof_photo = getuserinfo($row['userid'], "profile_photo", $conn);
  $idsto=$row['storia_id'];
  $elem = mysqli_query($conn, "SELECT COUNT(*) AS da_vedere FROM `storie_images` WHERE storia_id='$idsto' AND imm_id NOT IN (SELECT imm_id FROM image_views WHERE viewer='$userid')");
  while($ok = mysqli_fetch_assoc($elem)){
    $num_elem = $ok['da_vedere'];
  }
  //here I put the line that add the array to the json array:
}

但问题是这一行,它应该创建一个新数组并将其放入json中:

$response['storie'] = [array("story_id" => $idsto, "username" => $usern, "profile_photo" => $prof_photo, "copertina" => $row['copertina'], "num_elements" => $num_elem, "rating" => "4.5")];

只有一条记录时有效,多条记录时无效。 有人可以帮我吗?

【问题讨论】:

标签: php mysql arrays json


【解决方案1】:

只需替换:

$response['storie'] = [array("story_id" => $idsto, "username" => $usern, "profile_photo" => $prof_photo, "copertina" => $row['copertina'], "num_elements" => $num_elem, "rating" => "4.5")];

$response['storie'][] = array("story_id" => $idsto, "username" => $usern, "profile_photo" => $prof_photo, "copertina" => $row['copertina'], "num_elements" => $num_elem, "rating" => "4.5");

【讨论】:

    【解决方案2】:

    那是因为你在 while 中使用了 $response['storie'] 来解决这个问题:

    1- 例如,创建另一个名为 result 的数组,然后在 while 中使用它

    $response = array();
    $result = array ()
    while (....)
    {
    //here I put the line that add the array to the json array:
    $result[] = array("story_id" => $idsto, "username" => $usern, "profile_photo" => $prof_photo, "copertina" => $row['copertina'], "num_elements" => $num_elem, "rating" => "4.5");
    } 
    

    2-然后在循环外使用响应数组:

    $response['storie'] = $result;
    

    你的代码会是这样的:

       $response = array();
       $result = array ()
    
        $sql = mysqli_query($conn, "SELECT * FROM storie WHERE userid IN (SELECT following FROM follow WHERE follower='$userid')");
        while($row = mysqli_fetch_assoc($sql)){
        $usern = getuserinfo($row['userid'], "username", $conn);
        $prof_photo = getuserinfo($row['userid'], "profile_photo", $conn);
        $idsto=$row['storia_id'];
        $elem = mysqli_query($conn, "SELECT COUNT(*) AS da_vedere FROM `storie_images` WHERE storia_id='$idsto' AND imm_id NOT IN (SELECT imm_id FROM image_views WHERE viewer='$userid')");
        while($ok = mysqli_fetch_assoc($elem)){
        $num_elem = $ok['da_vedere'];
        }
        //here I put the line that add the array to the json array:
        $result[] = array("story_id" => $idsto, "username" => $usern, "profile_photo" => $prof_photo, "copertina" => $row['copertina'], "num_elements" => $num_elem, "rating" => "4.5");
        }
    
       $response['storie'] = $result;
    

    【讨论】:

      猜你喜欢
      • 2012-05-27
      • 1970-01-01
      • 2020-06-17
      • 2016-06-12
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多