向JSON编码的数组添加额外对象

9

我目前正在使用JSON编码的数组来展示数据库中的用户,以实现自动建议功能。

它看起来像这样:

$sth = mysql_query("SELECT id, name FROM users");

$json = array();

    while($row = mysql_fetch_assoc($sth)) {
        $json['name'] = $row['name'];
        $json['id'] = $row['id'];
        $data[] = $json;
    }

print json_encode($data);

这将返回:
[{"id":"81","name":"John Doe"},{"id":"82","name":"Jane Doe"}]

我的问题有点双重:

首先,我该如何手动添加一个附加对象到这个输出中?例如,假设我想要添加:{"id":"444","name":"A New Name"}

那么,它应该看起来像这样:

[{"id":"81","name":"John Doe"},{"id":"82","name":"Jane Doe"},{"id":"444","name":"A New Name"}]

其次,假设我还想从另一个表中添加更多对象到数组中,如下所示:
$sth = mysql_query("SELECT id, title FROM another_table");

$json = array();

    while($row = mysql_fetch_assoc($sth)) {
        $json['name'] = $row['title'];
        $json['id'] = $row['id'];
        $data[] = $json;
    }

print json_encode($data);

这样我就可以在JSON数组中填充两个表格,从而在我的自动建议中显示为附加选项。希望这样能让你明白我想要实现的目标。谢谢!

1
为什么您不在进行 json_encode 之前将它们添加到数组中呢?这对我来说更有意义。 - wimvds
4个回答

13

只需不断向 $data 数组推入数据。

$json = array();

    while($row = mysql_fetch_assoc($sth)) {
        $json['name'] = $row['name'];
        $json['id'] = $row['id'];
        $data[] = $json;
    }

$custom = array('name'=>'foo', 'id' => 'bar');
$data[] = $custom;

最后,在执行json_encode之前进行操作。假设您不是在JS本身中使用多个ajax调用进行合并。

如果您有分离的脚本,请将它们合并到一个php页面中。


1
谢谢Meder。比我想象的要容易。 - Dodinas

4

试试这种方法:

$temp = json_encode($json);  //$json={"var1":"value1","var2":"value2"}   
$temp=substr($temp,0,-1);
$temp.=',"variable":"'.$value.'"}';

1
你可以编辑JSON(文本),但在编码之前修改数组会更容易。或者我有什么遗漏吗?

0

我不是这些领域的专家,但我会尽力帮忙。可以尝试以下其中一种:

选项1(我不知道mysql中如何使用联合):

$sth = mysql_query("SELECT id, name FROM users union SELECT id, name FROM (SELECT id, title as name from another_table) as T2"); 


    $json = array(); 

        while($row = mysql_fetch_assoc($sth)) { 
            $json['name'] = $row['name']; 
            $json['id'] = $row['id']; 
        }

    $json['name'] = 'A new name';
    $json['id'] = '444';
    $data[] = $json; 

    print json_encode($data);

我从未学过PHP,所以我在做出一些假设。而且我也从未使用过MySql,所以还有更多的假设。

选项2:

$sth = mysql_query("SELECT id, name FROM users"); 


    $json = array(); 

        while($row = mysql_fetch_assoc($sth)) { 
            $json['name'] = $row['name']; 
            $json['id'] = $row['id']; 
        }

$sth = mysql_query("SELECT id, title from another_table"); 


        while($row = mysql_fetch_assoc($sth)) { 
            $json['name'] = $row['title']; 
            $json['id'] = $row['id']; 
        }

    $json['name'] = 'A new name';
    $json['id'] = '444';
    $data[] = $json; 

    print json_encode($data);

希望这能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接