Вложение JSON в PHP - PullRequest
       2

Вложение JSON в PHP

0 голосов
/ 04 февраля 2011

У меня есть это в php

$comment = array;
while($row = mysql_fetch_array($sqlExec, MYSQL_ASSOC)){
   $comment[$row['name']] = $row['comment'];
}
echo json_encode($comment);

Having these results
{"John":"Yo","Dan":"Hello","May":"Bye"}

Проблема в том, что у меня на самом деле есть два комментария (Zup, Yo) для Джона, но, как вы можете видеть, он отображает только последний комментарий Джона "Yo". Поэтому я хотел, чтобы результаты Джона были

{"John":["Yo","Sup"]}

^ это возможно?

Как я могу это сделать? Прошу прощения, мне все еще трудно иметь дело с JSON. Спасибо

Это фактически мой полный код

while($row = mysql_fetch_array($sqlExec, MYSQL_ASSOC)){
    $comment[$row['name']] = $row['comment'];

    $sql_dup = "SELECT name, COUNT(name) AS dup_count 
                        FROM comment
                        GROUP BY name
                        HAVING (COUNT(name) > 1) 
                ";
    $sqlExec_dup = mysql_query($sql_dup, $connection);
    $row_dup = mysql_fetch_array($sqlExec_dup, MYSQL_ASSOC);
    if($row['name'] = $row_dup['name']){

        $sql_dup2 = "SELECT * FROM comment WHERE name = '{$row['name']}'";
        $sqlExec_dup2 = mysql_query($sql_dup2, $connection);
        while($row_dup2 = mysql_fetch_array($sqlExec_dup2, MYSQL_ASSOC)){
            $x += 1;
            if($x <= $row_dup['dup_count']){
                $comment[$row['name']][] = $row_dup2['comment'];
            }
        }
    }
}

Если имя содержит дубликат, то есть содержит более одного комментария, все равно не могу получить желаемые результаты.

Ответы [ 4 ]

2 голосов
/ 04 февраля 2011

Вы должны проверить, существует ли он уже или нет, и если это так, создайте массив (или сделайте это с самого начала)

// Create arrays with names
$comment[$row['name']][] = $row['comment'];

или

// Check if there's an array
if (isset($comment[$row['name']])) {
    if (is_array($comment[$row['name']])) {
        $comment[$row['name']][] = $row['comment'];
    } else {
        $comment[$row['name']] = array($comment[$row['name']], $row['comment']);
    }
} else {
    $comment[$row['name']] = $row['comment'];
}

Я должен отметить, что первое решение было бы очень предпочтительным, потому что оно намного более последовательное.

1 голос
/ 04 февраля 2011

Да, это возможно, но для этого нужно выполнить некоторую предварительную обработку:

$comment = array;
while($row = mysql_fetch_array($sqlExec, MYSQL_ASSOC)){
   if(!isset($comment[$row['name']])) {
     $comment[$row['name']] = array();
   }
   $comment[$row['name']][] = $row['comment'];
}
echo json_encode($comment);
0 голосов
/ 04 февраля 2011

Простое изменение:

$comment[$row['name']] = $row['comment'];

до

$comment[$row['name']][] = $row['comment'];

Каждый элемент имени массива $ comment перезаписывался каждый раз, когда появлялось одно и то же имя.

0 голосов
/ 04 февраля 2011

Да, это возможно.Вместо этой строки:

$comment[$row['name']] = $row['comment'];

Используйте это:

$comment[$row['name']] = array('Yo', 'Sup');

И замените содержимое массива желаемыми приветствиями из базы данных.

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