2010-08-17 5 views
8

В настоящее время я использую JSON-кодированный массив для отображения пользователей в моей базе данных для функции автоматического предложения.Добавить дополнительные объекты в JSON Encoded Array

Это выглядит примерно так:

$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"}] 

Мой вопрос несколько 2 раза:

Первый, как бы я вручную добавить дополнительные объект для этого вывода? Например, предположим, что я хотел бы добавить: {"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

ответ

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

Спасибо, Медер. Легче, чем я думал. – Dodinas

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

Надеется, что это помогает.

4

Try таким образом: -

$temp = json_encode($json); //$json={"var1":"value1","var2":"value2"} 
$temp=substr($temp,0,-1); 
$temp.=',"variable":"'.$value.'"}'; 
Смежные вопросы