2015-06-09 2 views
1

У меня есть MySQL таблицы (название: "сообщения"), который имеет три столбца, как показано ниже:Группировка JSON-вывода в соответствии с конкретной колонке тузд

MessageId, fromUserID, содержание

Я хотел бы есть json-выход, используя php-скрипт, например, следующий формат; Мне нужно разобрать сообщения каждого пользователя (fromUserID).

JSONOutput:

{ 
"newCount":"x", 
"messages": 
[ 
    { 
     "fromUserID":"x", 
     "messagesArray": 
     [ 
      {"messageID":"x","content":"xxx"}, 
      {"messageID":"x","content":"xxx"}, 
      {"messageID":"x","content":"xxx"}     
     ] 
    }, 
    { 
     "fromUserID":"y", 
     "messagesArray": 
     [ 
      {"messageID":"x","content":"xxx"}, 
      {"messageID":"x","content":"xxx"}, 
      {"messageID":"x","content":"xxx"}     
     ] 
    }, 
    { 
     "fromUserID":"z", 
     "messagesArray": 
     [ 
      {"messageID":"x","content":"xxx"}, 
      {"messageID":"x","content":"xxx"}, 
      {"messageID":"x","content":"xxx"}     
     ] 
    } 
] 
} 

Мой PHP скрипт:

$query = mysqli_query($con,"SELECT * FROM messages ORDER BY fromUserID"); 

$outputArray = array(); 

$outputArray['hasNew'] = mysqli_num_rows($query); 

$messagesArray = array(); 

if($query) 
{ 
    while($row = mysqli_fetch_assoc($query)) 
    { 
     $MSGArray = array(); 
     $messagesArray['fromUserID'] = $row['fromUserID']; 
     $MSGArray['messageID'] = $row['messageID']; 
     $MSGArray['content'] = $row['content']; 
     $messagesArray['MessagesArray'][] = $MSGArray;  
    } 
    $outputArray['Messages'][] = $messagesArray; 
} 

echo json_encode($outputArray); 

Но над сценарием я даю неправильный результат, как показано ниже:

{ 
"hasNew":6, 
"Messages": 
[ 
{ 
    "fromUserID":"24", 
    "MessagesArray": 
    [ 
    {"messageID":"4","content":"test"}, 
    {"messageID":"3","content":"test"}, 
    {"messageID":"6","content":"test"}, 
    {"messageID":"5","content":"test"}, 
    {"messageID":"1","content":"test"}, 
    {"messageID":"2","content":"test"} 
    ] 
} 
] 
} 

Мой PHP скрипт просто используя последний fromUserID Значение группировки сообщений !!!

Пожалуйста, дайте мне знать, где я ошибаюсь ...

+0

Такая структура плохо для такого рода вещи. Вы храните вещи, которые должны быть ключами как значения, то есть вам придется искать весь основной массив, чтобы найти, где вам нужно вставлять новые данные. –

+0

@MarcB, Не могли бы вы предложить мне хороший способ? –

+0

Попробуйте заменить $ messagesArray ['fromUserID'] = $ row ['fromUserID']; by $ messagesArray ['fromUserID'] [$ row ['fromUserID']] = array(), а затем вставляет в него msg fromUserID. – Armage

ответ

1

Попробуйте

if($query) 
{ 
    while($row = mysqli_fetch_assoc($query)) 
    { 
     $MSGArray = array(); 
     $messagesArray[$row['fromUserID']]['fromUserID'] = $row['fromUserID']; 
     $MSGArray['messageID'] = $row['messageID']; 
     $MSGArray['content'] = $row['content']; 
     $messagesArray[$row['fromUserID']]['MessagesArray'][] = $MSGArray;  
    } 
foreach($messagesArray as $value) { 
    $outputArray['Messages'][] = $value; 
} 
} 
+0

Танки для вашего ответа. Это то, что мне нужно ... –

Смежные вопросы