Как объединить два массива с уникальными значениями в multi, а l oop php - PullRequest
0 голосов
/ 19 июня 2020

Может ли кто-нибудь помочь мне решить эту проблему с массивом? Я использую базу данных 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",
        },
    }
}];

Вы можете проверить результат здесь ... это повторяется в списке комментариев к другим результатам

1 Ответ

0 голосов
/ 19 июня 2020

ОБНОВЛЕННЫЙ ОТВЕТ:

Думаю, теперь я понимаю, что вы хотите сделать. вы пытаетесь создать подмассив «приветствие» в строке $ row, содержащий все обои, связанные с этой новостной статьей. Чтобы получить желаемый результат, вам не нужно объединять массивы row2 и row, просто сделайте row2 частью row1

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

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

//...

Этот код должен сгенерировать json, который вы опубликовали.

объединение массивов вместо этого создаст что-то вроде этого:

"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",

и может быть выполнено только с одним изображением

Если бы вы хотели, чтобы это выглядело так, как указано выше, если бы был только один image вы можете изменить код следующим образом:

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;
}

//...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...