簡體   English   中英

如何在多重while循環php中合並兩個具有唯一值的數組

[英]How merge two array with unique values in multi while loop php

有人可以幫我解決這個數組問題嗎? 我正在使用 MySQL 數據庫,我試圖在兩個 while 循環中從兩個表中獲取值。 我想合並結果,如下所述。 我嘗試使用以下代碼實現此目的,但是,這對我不起作用。

    $jsonObj= array(); 
    $query="SELECT * FROM `tbl_news` ORDER BY `news_type` desc limit 50, 100"; 
    $sql0 = mysqli_query($mysqli,$query) or die(mysqli_error($mysqli)); 
    while($data = mysqli_fetch_assoc($sql0))
    {
        $nid = $data['id'];
        $cquery = "select id from tbl_comments where news_id = '$nid'";
        $cresult = mysqli_query($mysqli,$cquery);
        $totalc =  mysqli_num_rows($cresult);
        
        $row['id'] = $data['id']; 
        $row['news_type'] = $data['news_type'];
        $row['news_heading'] = stripslashes($data['news_heading']); 

          //Comments
          $qry2="SELECT * FROM tbl_comments WHERE tbl_comments.`news_id`='".$nid."'";
          $result2=mysqli_query($mysqli,$qry2); 
          $row2['totalc'] = $result2->num_rows;
          if($result2->num_rows > 0)
          {     
                while ($row_comments=mysqli_fetch_array($result2)) {
                    
                    $row2['comment_id'] = $row_comments['id'];
                    $row2['news_id'] = $row_comments['news_id']; 
                    $row2['user_name'] = $row_comments['user_name'];
                    $row2['user_email'] = $row_comments['user_email']; 
                    $row2['comment_text'] = $row_comments['comment_text']; 
                    $row['user_comments'][]= $row2;
                  } 
          }
          else
          {   
                $row2 = array();
          } 
        array_push($jsonObj,$row); 
    } 
    $set['SET_News'] = $jsonObj;
    
    header( 'Content-Type: application/json; charset=utf-8' );
    echo $val= str_replace('\\/', '/', json_encode($set,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
    die(); 

我期待這個結果

"Set_News": [{
    {
        "id": "104",
        "news_type": "any",
        "news_heading": "Mews heade here 1",
        "user_comments": [{
                "totalc": 2,
                "comment_id": "17",
                "news_id": "104",
                "user_name": "abhijeet",
                "user_email": "XXX@gmail.com",
                "comment_text": "nice"
            },
            {
                "totalc": 2,
                "comment_id": "18",
                "news_id": "104",
                "user_name": "abhijeet",
                "user_email": "XXX@gmail.com",
                "comment_text": "nice"
            }
        ],
        {
            "id": "622",
            "news_type": "any",
            "news_heading": "News head here2",
        },
    }
}];

您可以在此處查看結果...這是重復的無關結果評論列表

更新答案:

我想我明白你現在想做什么。 您正在嘗試在 $row 中創建一個子數組“greet”,其中包含與該新聞文章關聯的所有壁紙。 要獲得您想要的結果,您不必合並 row2 和 row arrays,您只需將 row2 作為 row1 的一部分

//...
$row2= array();
while($data2 = mysqli_fetch_array($result2))
{
    array_push($row2,$data2);
} 

if (count($row2) > 0) {
    $row["greet"] = $row2;
}

//...

此代碼應生成您發布的 json。

合並 arrays 會創建類似這樣的東西:

"id": "30",
"news_type": "image",
"news_heading": "News title",
"news_weburl": "#",
"total_share": "0",
"cat_id": "112",
"category_name": "tech",
"wid": "11",
"wall_title": "tech image wallpaper1",
"wall_image": "image1.jpg",

並且只能用一張圖片完成

如果您希望它看起來像上面那樣,如果只有一張圖像,您可以像這樣更改代碼

if (count($images) == 1) {
    $row["wid"] = $row2[0]["wid"];
    $row["wall_title"] = $row2[0]["wall_title"];
    $row["wall_image"] = $row2[0]["wall_image"];
} elseif (count($row2) > 1) {
    $row["greet"] = $row2;
}

//...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM