[PHP] Как закодировать в JSON в данном случае?

Программирование, которое не связано с API и Flash.

[PHP] Как закодировать в JSON в данном случае?

Сообщение MISTER_GONWIK » 02 июн 2013, 16:37

Как закодировать в JSON в данном случае?
  1.  
  2. ...
  3. $js .= "array('response'=>array('user'=>array(";
  4.         for ($i=0; $i<mysql_num_rows($sql);$i++){
  5.         $r = mysql_fetch_array($sql);
  6.         $js .= "array('user_id'=>".$r['uid'].",'score'=>".$r['score']."),";
  7.          }
  8. $js .= ")));";
  9. $js=str_replace("\"",'',$js);
  10. echo json_encode($js);
  11.  
  12.  


Выводит:
  1. "array('response'=>array('user'=>array(array('user_id'=>1,'score'=>14525),array('user_id'=>2,'score'=>4161),)));"

Должно:
  1. {"response":{"user":[{"user_id":1,"score":14525},{"user_id":2,"score":4161}]}}


Подскажите, пожалуйста
MISTER_GONWIK

 
Автор темы
Сообщения: 1
Зарегистрирован: 02 июн 2013, 16:27
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: [PHP] Как закодировать в JSON в данном случае?

Сообщение sasha^ » 02 июн 2013, 17:43

выше у вас даже не говно-код, а хуже :)
вот так нужно..
  1. $res = array("response" => array("user" => array()));
  2. while($f = mysql_fetch_array($sql))
  3.         array_push($res["response"]["user"],
  4.                    array("user_id" => $f["uid"], "score" => $f["score"]));
  5. echo json_encode($res);

За это сообщение автора sasha^ поблагодарил:
MISTER_GONWIK
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.

Re: [PHP] Как закодировать в JSON в данном случае?

Сообщение IndieGD » 02 июн 2013, 18:44

Позвольте добавить, лучше там где это возможно вместо array_push() использовать пустые квадратные скобки
  1. $res["response"]["user"][] = array("user_id" => $f["uid"], "score" => $f["score"]);

Так как это более производительно, об этом упомянуто даже в оф. документации.
IndieGD

 
Сообщения: 124
Зарегистрирован: 28 май 2013, 19:20
Благодарил (а): 1 раз.
Поблагодарили: 34 раз.

Re: [PHP] Как закодировать в JSON в данном случае?

Сообщение sasha^ » 02 июн 2013, 19:14

согласен, но в редакторе намного проще найти добавление в массив таким способом.
а насчет скорости и памяти - речь о сотых секунды в нашем случае и нескольких мегабайтах, т.к. не думаю что речь о массиве более 1к.
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.

Re: [PHP] Как закодировать в JSON в данном случае?

Сообщение IndieGD » 02 июн 2013, 20:12

sasha^, как можно не считать доли секунды, когда речь идет о серверном скрипте? 5к пользователей и эти доли секунды передадут привет.
В конкретном случае речь идет о снижении производительности в 8-10 раз. Я сам проводил тесты, там где вариант с [] отрабатывает за 0.3, варианту с array_push требуется >2 секунд, как по мне это повод задуматься. :)
IndieGD

 
Сообщения: 124
Зарегистрирован: 28 май 2013, 19:20
Благодарил (а): 1 раз.
Поблагодарили: 34 раз.

Re: [PHP] Как закодировать в JSON в данном случае?

Сообщение sasha^ » 02 июн 2013, 20:18

какие нафиг 5к юзеров, если человек не может закодировать в JSON?))
а насчет [] согласен...
З.Ы. пожалуй у себя перепишу кое-где))
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.

Re: [PHP] Как закодировать в JSON в данном случае?

Сообщение IndieGD » 02 июн 2013, 20:19

какие нафиг 5к юзеров, если человек не может закодировать в JSON?))

Ну это да :)
IndieGD

 
Сообщения: 124
Зарегистрирован: 28 май 2013, 19:20
Благодарил (а): 1 раз.
Поблагодарили: 34 раз.


Вернуться в Программирование на PHP и других языках (без использования API)



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0