За последние 24 часа нас посетили 17372 программиста и 1721 робот. Сейчас ищут 946 программистов ...

оптимизация php кода

Тема в разделе "Прочие вопросы по PHP", создана пользователем jurastar, 27 июл 2015.

  1. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    вопрос знающим php, ниже приведен рабочий код, но он очень сильно долго грузится, есть ли возможность его как-то оптимизировать для ускорения загрузки...

    на сортировку внимание не обращайте она не работает...

    работу скрипта можно увидеть http://uadd-clans.tk/sostav_clana_new3.php

    Код (PHP):
    1. <?php
    2. header("Content-type: text/html; charset=utf-8");
    3. $clan_id = '145563'; 
    4. $appid = "demo"; 
    5. $urlID = "http://api.worldoftanks.ru/wgn/clans/info/?application_id=$appid&language=ru&clan_id=".$clan_id; //ссылка на json
    6. $curl = curl_init();
    7.         curl_setopt($curl, CURLOPT_URL, $urlID);
    8.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    9.         $resultID = json_decode(curl_exec($curl), true);
    10.  
    11. function GetRoleWeight($role)
    12. {
    13. switch($role)
    14. {
    15. case "commander": return 11;
    16. case "executive_officer": return 10;
    17. case "personnel_officer": return 9;
    18. case "combat_officer": return 8;
    19. case "intelligence_officer": return 7;
    20. case "quartermaster": return 6;
    21. case "recruitment_officer": return 5; 
    22. case "junior_officer": return 4;
    23. case "private": return 3;
    24. case "recruit": return 2;
    25. case "reservist": return 1;
    26. default: die("Неизвестная роль $role" );
    27. } 
    28. }
    29. function cmp($a, $b)
    30. { 
    31. return GetRoleWeight($b["role"])>GetRoleWeight($a["role"]);
    32. }
    33. ?>
    34.  
    35. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    36. <html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
    37.     <head>
    38.         
    39.         <meta charset="windows-1251">
    40.         <link rel="stylesheet" href="http://uadd-clans.tk/css/style.css" type="text/css" media="screen">
    41.         <title>Список клана</title>
    42.  
    43.         <style>
    44.             table.tablesorter {
    45.                 font-family:arial;
    46.                 background-color: #CDCDCD;
    47.                 margin:10px 0pt 15px;
    48.                 font-size: 8pt;
    49.                 width: 100%;
    50.                 text-align: left;
    51.             }
    52.             table.tablesorter thead tr th, table.tablesorter tfoot tr th {
    53.                 background-color: #e6EEEE;
    54.                 border: 1px solid #FFF;
    55.                 font-size: 8pt;
    56.                 padding: 4px;
    57.             }
    58.             table.tablesorter thead tr .header {
    59.                 background-image: url(bg.gif);
    60.                 background-repeat: no-repeat;
    61.                 background-position: center right;
    62.                 cursor: pointer;
    63.             }
    64.             table.tablesorter tbody td {
    65.                 color: #3D3D3D;
    66.                 padding: 4px;
    67.                 background-color: #FFF;
    68.                 vertical-align: top;
    69.             }
    70.             table.tablesorter tbody tr.odd td {
    71.                 background-color:#F0F0F6;
    72.             }                              
    73.             table.tablesorter thead tr .headerSortUp {
    74.                 background-image: url('data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7');
    75.             }
    76.             table.tablesorter thead tr .headerSortDown {
    77.                 background-image: url('data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7');
    78.             }
    79.             table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp {
    80.                 background-color: #8dbdd8;
    81.             }
    82.         </style>
    83.         <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.2.min.js"></script>
    84.         <script type="text/javascript" src="//cdn.ucb.org.br/Scripts/tablesorter/jquery.tablesorter.min.js"></script>
    85.         <script type="text/javascript">
    86.             $(document).ready(function() {
    87.                 // теперь по умолчанию у нас всегда будет запускаться виджет зебра
    88.                 $.tablesorter.defaults.widgets = ['zebra'];
    89.                 // теперь по умолчанию всегда будем сортировать по первой колонке
    90.                 $.tablesorter.defaults.sortList = [[3,1]];
    91.                 // вызов плагина
    92.                 $("table").tablesorter();
    93.             });   
    94.         </script>
    95.         <style>
    96.             .num {
    97.                 font-size: 17px;
    98.                 font-weight: bold;
    99.             }
    100.             .op2 {
    101.                 font-size: 11pt;
    102.                 font-weight: bold;
    103.                 color: #ffffff;
    104.             }
    105.         </style>
    106.  
    107.  
    108.     </head>
    109.     <body style="margin: 0; padding: 0;">
    110.         <table border="0" cellpadding="0" cellspacing="0" width="840" style="border: 4px solid #3e4156;">
    111.         <tr><td bgcolor="#3E4156" height="23"><span class="op2">СОСТАВ КЛАНА UA_DD</span></td></tr>
    112.         <tr><td>
    113.             <table class="tablesorter" cellspacing="1" style="width: 800px;">             
    114.                 <thead>
    115.                     <tr>
    116.                         <th>Имя</th>
    117.                         <th>Кол. боев</th>
    118.                         <th>% побед</th>
    119.                         <th>Рейтинг WG</th>
    120.                         
    121.                         
    122.                         <th>Дней в клане</th>
    123.                         <th>Звание</th>
    124.                     </tr> 
    125.                 </thead>
    126.                 <tbody> 
    127.                     <?php             
    128.                     foreach($resultID['data'][$clan_id]['members'] as $key => $val){
    129.                         $new_time = date('Y.m.d',$val['joined_at']);
    130. usort($resultID['data'][$clan_id]['members'], "cmp" );
    131.                         ?> 
    132.                         <tr>
    133. <td><?php echo $val['account_name']; ?></td>
    134. <td>
    135. <?php $account_id = $val['account_id'];
    136. $urlstat = "http://api.worldoftanks.ru/wot/ratings/accounts/?application_id=$appid&fields=battles_count&type=all&account_id=".$account_id; //ссылка на json
    137. $curl = curl_init();
    138.         curl_setopt($curl, CURLOPT_URL, $urlstat);
    139.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    140.         $rating_battles = json_decode(curl_exec($curl), true);
    141.           foreach($rating_battles['data'] as $key => $val_battles);
    142.       echo $val_battles['battles_count']['value'];
    143. ?></td>
    144. <td>
    145. <?php $account_id = $val['account_id'];
    146. $urlstattt = "http://api.worldoftanks.ru/wot/ratings/accounts/?application_id=$appid&fields=wins_ratio&type=all&account_id=".$account_id; //ссылка на json
    147. $curl = curl_init();
    148.         curl_setopt($curl, CURLOPT_URL, $urlstattt);
    149.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    150.         $rating_wins = json_decode(curl_exec($curl), true);
    151.           foreach($rating_wins['data'] as $key => $val_wins);
    152.       echo $val_wins['wins_ratio']['value'];
    153. ?>%
    154. </td>
    155. <td>
    156. <?php $account_id = $val['account_id'];
    157. $urlstatt = "http://api.worldoftanks.ru/wot/ratings/accounts/?application_id=$appid&fields=global_rating&type=all&account_id=".$account_id;
    158. $curl = curl_init();
    159.         curl_setopt($curl, CURLOPT_URL, $urlstatt);
    160.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    161.         $rating_global = json_decode(curl_exec($curl), true);
    162.           foreach($rating_global['data'] as $key => $val_global);
    163.       echo $val_global['global_rating']['value'];
    164. ?></td>
    165.  
    166.                             
    167.                             
    168.                             <td><?php echo round((strtotime(date("Y-m-d H:i:s")) - $val['joined_at'])/(3600*24)); ?></td>
    169.                             <td><?php echo $val['role_i18n']; ?></td>
    170.                                                              </tr>
    171.                         <?php } ?>
    172.                 </tbody> 
    173.             </table>
    174.             <p class="num">Всего игроков: <?php echo $resultID['data'][$clan_id]['members_count'] ?></p>
    175.             </td>
    176.         </tr>
    177.         </table>
    178.     </body>
    179. </html>
    отвечу на все вопросы
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Только на серваке внешнем, или на локалке тоже по минуте отвечает? Если на локалке ок, то меняй хостинг.
    xdebug есть? Трейсинг им сделай, чтобы посмотреть, куда отжирается время.

    Это на вскидку, чем ты сам себе можешь помочь. Сам код изучать, увы, нет времени сейчас.

    Добавлено спустя 2 минуты 18 секунд:
    API танчиков, кстати, как долго отвечает, замерял? Если нет, замерь. Быть может, это оно меньжуется хрен знает сколько. В таком случае, результаты нужно сохранять при запросе. И выводить именно сохраненные. А новые по тому же крону получать раз в N времени.
     
  3. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    с этим проблем нет, ответы быстрые...
    а вот с количеством запросов тута "беда", их много получается...
    я так понимаю, здесь необходимо каким-то образом объединить все запросы и "скопом" их отправить.. но как это реализовать ума не приложу...
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Стоп. Какое количество запросов? Тут же всего 1 курл проскакивает и получает JSON полный, нет?
     
  5. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    в теле HTML $account_id = $val['account_id']; каждому никнейму присваиваем ID, и делаем отдельный запрос, одно значение (допустим количество игр) = один запрос...
    Код (PHP):
    1. <?php $account_id = $val['account_id'];
    2. $urlstat = "http://api.worldoftanks.ru/wot/ratings/accounts/?application_id=$appid&fields=battles_count&type=all&account_id=".$account_id;
    3. $curl = curl_init();
    4.         curl_setopt($curl, CURLOPT_URL, $urlstat);
    5.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    6.         $rating_battles = json_decode(curl_exec($curl), true);
    7.           foreach($rating_battles['data'] as $key => $val_battles); 
    8.       echo $val_battles['battles_count']['value'];
    9. ?>
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ну тогда ты ударяешься о таймаут сервера танчиков, который так борется со спамом. Грубо говоря, следующий запрос от тебя он обработает только спустя пару секунд от предыдущего. Вот и жует твой скрипт полторы минуты список. Кланы в игре официально есть? Посмотри именно клановый API, а не по учеткам.

    Я как-то c API eve-online работал, там через ID корпорации(клана), можно было за один раз вытаскивать всю инфу по персам.
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    спанчбоб убежал из закусочной красти и взялся за программирование))
    [​IMG]
     
  8. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    мда... шутки я конечно тоже люблю... но смысл с ее здесь? или таким способом набиваешь счетчик сообщений, чтобы думали мол авторитетный php-гуру???
    помог бы лучше оптимизировать...
    клановый API есть, он выдает только никнейм игрока и его ID, соотвецтвенно вся инфа по определенному ID лежит в другом запросе API
    - "http://api.worldoftanks.ru/wgn/clans/info/?application_id=$appid&language=ru&clan_id=".$clan_id;
    - "http://api.worldoftanks.ru/wot/ratings/accounts/?application_id=$appid&fields=battles_count&type=all&account_id=".$account_id;
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ну тогда, как я выше советовал, кешируй данные. И обновляй не в рилтайме.
    Можно, например, раз в 5 минут обновлять кого-то одного. То есть, табличка не будет прям устаревать за день.
     
  10. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    если записать все данные цыкла (имя игрока - кол. игор - и т.д.)
    Код (Text):
    1. file_put_contents('data1.txt', $val['account_name'], FILE_APPEND);
    в файл, оно записывает все в одну строчку, получается
    Код (Text):
    1. baron80_802236251.977485PositiveGame1771858.048353dune20041650751.086077LionZT1760450.425483streamers877349.744610Maestro141586449.765624Daily2224949.275259ADS1045529652.437278Gordey1232547250.155687sasukeuzumaki1961552.16216Yastremski293444652.777544Balaganoff2462850.345635DAnTE171381953.387049hachkolya2062149.624722Fekashyk714453.296795batya18934387253.348505jurastar1929650.075804eva193134751.47276PjKuz1301653.496619DieSeL_1202372049.35945 и т.д.
    как его теперь правильно с файла прочитать?
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Разделитель - точка?
    explode вам в руки :)
     
  12. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    не понял фразу(((

    хотелось бы результат получить
    Код (Text):
    1. [id1]
    2. { кол. игор: значение,
    3. % побед: значение,
    4. и т.д.: значение,
    5. }
    6. [id2]
    7. { кол. игор: значение,
    8. % побед: значение,
    9. и т.д.: значение,
    10. }
    у кого какие мысли по этому поводу будут?
     
  13. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Покажите, что будет на выводе:
    Код (PHP):
    1. var_dump($val['account_name']); 
    А лучше
    Код (PHP):
    1. var_dump($val); 
    Мне просто кажется, что следовало бы добавить:
    Код (PHP):
    1. file_put_contents('data1.txt', $val['account_name']."\n", FILE_APPEND); 
     
  14. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    показую:
    Код (Text):
    1. array(5) { ["role"]=> string(7) "recruit" ["role_i18n"]=> string(20) "Новобранец" ["joined_at"]=> int(1420654201) ["account_id"]=> int(163923) ["account_name"]=> string(10) "baron80_80" } array(5) { ["role"]=> string(7) "private" ["role_i18n"]=> string(8) "Боец" ["joined_at"]=> int(1437924317) ["account_id"]=> int(178588) ["account_name"]=> string(12) "PositiveGame" } array(5) { ["role"]=> string(9) "reservist" ["role_i18n"]=> string(18) "Резервист" ["joined_at"]=> int(1414785888) ["account_id"]=> int(215777) ["account_name"]=> string(8) "dune2004" } array(5) { ["role"]=> string(7) "private" ["role_i18n"]=> string(8) "Боец" ["joined_at"]=> int(1431968079) ["account_id"]=> int(326977) ["account_name"]=> string(6) "LionZT" }   и т.д...
    а что оно дает? не понйму...

    а вот с ."\n", уже получается интересно:
    Код (Text):
    1. baron80_80
    2. 22362
    3. 51.97
    4. 7485
    5. PositiveGame
    6. 17718
    7. 58.04
    8. 8353
    9. dune2004
    10. 16507
    11. 51.08
    12. 6077
    результат вроде-бы добротный, но вот как его теперь из файла вытянуть...??? чтобы получилась таблица:..
     
  15. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Дает оно вот что:
    Код (PHP):
    1. <?php
    2. $table = '<?xml version="1.0" encoding="UTF-8"?><table>';
    3. foreach($val as $table_row) {
    4.     $table .= "<tr><td>{$table_row['role']}</td>"
    5.                 . "<td>{$table_row['role_i18n']}</td>"
    6.                 . "<td>{$table_row['joined_at']}</td>"
    7.                 . "<td>{$table_row['account_id']}</td></tr>";
    8. }
    9. $table .= '</table>';
    10. echo $table;
    11. //или 
    12. // file_put_contents('table.xml', $table, FILE_APPEND); 
    Названия тегам можно дать и по именам атрибутов.
    Например: вместо tr - player, потом вместо td - role, role_i18n, joined_at, account_id соответственно...
     
  16. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    с этим я с Вами согласен, но это все в одном запросе, его обработать можно и так..
    Код (PHP):
    1. $urlID = "http://api.worldoftanks.ru/wgn/clans/info/?application_id=$appid&language=ru&clan_id=".$clan_id; 
    Тут суть в другом,
    1: получаем список и айди - игроков - делаем запрос - (в данном случаи (можно даже использовать и Ваш вариант)),
    2:
    Код (PHP):
    1. $account_id = $val['account_id']; 
    3: теперь цыклом перебираем (допустим количество игр - игрока)
    Код (PHP):
    1. $urlstat = "http://api.worldoftanks.ru/wot/ratings/accounts/?application_id=$appid&fields=battles_count&type=all&account_id=".$account_id; 
    соответственно таких ссылок у меня уже 85 так как в клане на данный момент 85 игроков... (и это только их количество игр...) добавить сюда %побед + 85 запросов, + рейтинг игрока - еще 85 запросов, итого около 300 запросов к апи танчиков)))
    соответственно время генерации такого кода очень сильно велико...

    как выход посоветовали это все дело записывать в файл, и выводить таблицу из него, и кроном запускать скажем раз в день для обновления результатов... а вот с эти у меня уже очень большие проблемы...

    в Вашем варианте подставить $account_id = $val['account_id']; чтобы была полноценная таблица както возможно???
     
  17. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    С этим я так понял проблем нет...
    Я запутался... Что Вы вкладываете в понятие таблица? Вывод данных в таблицу из XML-файла - это несложная задача.
    Поиск, замена и т.п. тоже...

    И вот еще в АПИ Танков есть клановый запрос на все эти данные, но там стоит
    Значит в один запрос никак. Я правильно понял?
     
  18. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    http://uadd-clans.tk/sostav_clana_new3.php - вот эти все данные хотелось бы записать хотя-бы в текстовый файл, и с него отображать, для ускорения отображения результатов... вот с этим у меня большие проблемы...
     
  19. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Может тебе поможет сериализация.
    Код (PHP):
    1. //класс родитель
    2. abstract class Registry {
    3.  
    4.     abstract protected function get($key);
    5.  
    6.     abstract protected function set($key, $val);
    7. }
    8.  
    Код (PHP):
    1. //дочерний класс
    2. //если нет автозагрузки то сюда надо инклудить файл с родительским классом
    3. class ApplicationRegistry extends Registry {
    4.  
    5.     private static $instance;
    6.     private $freezedir = "data";
    7.     private $values = array();
    8.     private $mtimes = array();
    9.  
    10.     private function __construct() {
    11.         
    12.     }
    13.  
    14.     static function instance() {
    15.         if (!isset(self::$instance)) {
    16.             self::$instance = new self();
    17.         }
    18.         return self::$instance;
    19.     }
    20.  
    21.     protected function get($key) {
    22.         $path = $this->freezedir . DIRECTORY_SEPARATOR . $key;
    23.         if (file_exists($path)) {
    24.             clearstatcache();
    25.             $mtime = filemtime($path);
    26.             if (!isset($this->mtimes[$key])) {
    27.                 $this->mtimes[$key] = 0;
    28.             }
    29.             if ($mtime > $this->mtimes[$key]) {
    30.                 $data = file_get_contents($path);
    31.                 $this->mtimes[$key] = $mtime;
    32.                 return($this->values[$key] = unserialize($data));
    33.             }
    34.         }
    35.         if (isset($this->values[$key])) {
    36.             return $this->values[$key];
    37.         }
    38.         return null;
    39.     }
    40.  
    41.     protected function set($key, $val) {
    42.         $this->values[$key] = $val;
    43.         $path = $this->freezedir . DIRECTORY_SEPARATOR . $key;
    44.         file_put_contents($path, serialize($val));
    45.         $this->mtimes[$key] = time();
    46.     }
    47.  
    48.     //десериализация
    49.     static function getPlayers() {
    50.         return self::instance()->get('players');
    51.     }
    52.  
    53.     //сериализация данных об игроках
    54.     static function setPlayers($players) {
    55.         return self::instance()->set('players', $players);
    56.     }
    57.  
    58. }
    59.  
    Код (PHP):
    1. //Пример как использовать
    2. $players = ApplicationRegistry::getPlayers();//получаем данные сериализованные
    3.  
    4. //если нету данных будет возвращен NULL и сработает условие, в итоге мы должны будет обратиться в бд 
    5. //получить данные и сериализовать
    6. if (is_null($players)) {
    7.     $players = ""; //тут уже получаем данные из базы и сериализуем.
    8.     ApplicationRegistry::setPlayers($players);
    9.     $players = ApplicationRegistry::getPlayers();
    10. } 
    Добавлено спустя 10 минут 38 секунд:
    чтобы данные получить заново из бд, хватает удалить файл из директории data с именем players

    Добавлено спустя 32 секунды:
    можно запилить простенький скрипт для удаления и повесить на крон.
     
  20. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Если так нужен текстовый файл, то можно сохранить данные построчно (можно вставить метки)
    Потом читаете этот же файл построчно http://php.ru/manual/function.fgets.html и записываете в ячейки таблицы
    Могут возникнуть ошибки, но это лечится... Я бы рекомендовал XML или хотябы использовать какие-то метки типа
    Так наверное лучше:
    Код (PHP):
    1. [id1]{ кол. игор: значение,% побед: значение,и т.д.: значение}
    2. [id2]{ кол. игор: значение,% побед: значение,и т.д.: значение} 
    Считываете строку...
    Вычленяете с preg_match то что в фигурных скобках...
    Превращаете строку с функцией explode по символу , в массив...
    foreach...
    explode(':', $variable);
    формируете строку таблицы...
     
  21. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    но как создать такой файл с такими { }, блин я уже запутался...
     
  22. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    А зачем придумывать свой формат?
    1. json_encode/json_decode - формат JSON
    2. serialize/unserialize - сериализация, из недостатков - несколько запутанная структура для ручных правок
    3. var_export($data) - получаем массив php, который можно сохранить в файл как есть и затем загрузить $data = include "file.php";
    Это то что приходит в голову сходу.

    Кэшируйте отдельно данные, которые меняются крайне редко, а остальное обновляйте с нужной переодичностью. В идеале обновление данных лучше всего повесить на крон, который скажем будет сохранять всё в файлы c json`ом, из которых можно будет сформировать страничку в php или дергать напрямую из браузера рисуя всё там.
     
  23. jurastar

    jurastar Новичок

    С нами с:
    27 июл 2015
    Сообщения:
    14
    Симпатии:
    0
    romach, алгоритм идеальный, но с реализацией у меня большая проблема... я пока не могу сообразить как мне с помощью json_encode закодировать в такой формат
    Код (Text):
    1. [id1]{ кол. игор: значение,% побед: значение,и т.д.: значение}
    2. [id2]{ кол. игор: значение,% побед: значение,и т.д.: значение}
    все ID я беру из одного запроса, у меня получается список, а вот кол. боев - з другого, % побед - с трейтего запроса, и т.д., и это все в цыкле, теперь склеить его в [id1]{ кол. игор: значение,% побед: значение,и т.д.: значение}, кто может сообразить как из цыкла получить такую структуру....??? может у кого-то завалялся подобный кусочек кода..

    Код (PHP):
    1. <?php
    2. header("Content-type: text/html; charset=utf-8");
    3. $clan_id = '145563'; // идентификатор клана
    4. $appid = "a1607bb94d5a3fafcffe36b009332157"; // идентификатор приложения
    5. $urlID = "http://api.worldoftanks.ru/wgn/clans/info/?application_id=$appid&language=ru&clan_id=".$clan_id;
    6. $curl = curl_init();
    7.         curl_setopt($curl, CURLOPT_URL, $urlID);
    8.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    9.         $resultID = json_decode(curl_exec($curl), true);
    10.             
    11.             foreach($resultID['data'][$clan_id]['members'] as $key => $val){
    12.                    
    13.        echo $val['account_name'];
    14. echo "<br>";
    15. //file_put_contents('data1.txt', $val['account_name']."\n", FILE_APPEND);
    16.  
    17. //var_dump($val['account_name']);
    18. print_r($masnik);
    19.  
    20. $account_id = $val['account_id'];
    21. $urlstat = "http://api.worldoftanks.ru/wot/ratings/accounts/?application_id=$appid&fields=battles_count&type=all&account_id=".$account_id;
    22. $curl = curl_init();
    23.         curl_setopt($curl, CURLOPT_URL, $urlstat);
    24.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    25.         $rating_battles = json_decode(curl_exec($curl), true);
    26.           foreach($rating_battles['data'] as $key => $val_battles);
    27. //          file_put_contents('data1.txt', $val_battles['battles_count']['value']."\n", FILE_APPEND); 
    28. //var_dump($val_battles['battles_count']['value']);
    29.       echo $val_battles['battles_count']['value'];
    30. echo "<br>";
    31. $urlstattt = "http://api.worldoftanks.ru/wot/ratings/accounts/?application_id=$appid&fields=wins_ratio&type=all&account_id=".$account_id; //ссылка на json
    32. $curl = curl_init();
    33.         curl_setopt($curl, CURLOPT_URL, $urlstattt);
    34.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    35.         $rating_wins = json_decode(curl_exec($curl), true);
    36.           foreach($rating_wins['data'] as $key => $val_wins);
    37.               //      file_put_contents('data1.txt', $val_wins['wins_ratio']['value']."\n", FILE_APPEND); 
    38. //var_dump($val_wins['wins_ratio']['value']);
    39.       echo $val_wins['wins_ratio']['value'];
    40. echo "<br>";
    41.  
    42. $urlstatt = "http://api.worldoftanks.ru/wot/ratings/accounts/?application_id=$appid&fields=global_rating&type=all&account_id=".$account_id; //ссылка на json
    43. $curl = curl_init();
    44.         curl_setopt($curl, CURLOPT_URL, $urlstatt);
    45.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    46.         $rating_global = json_decode(curl_exec($curl), true);
    47.           foreach($rating_global['data'] as $key => $val_global);
    48.              //  file_put_contents('data1.txt', $val_global['global_rating']['value']."\n", FILE_APPEND); 
    49. //var_dump($val_global['global_rating']['value']);
    50.      echo $val_global['global_rating']['value'];
    51. echo "<br>";
    52. }
    53.  
    54.  
    55. ?>
     
  24. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    jurastar, ты собираешься данные править после сохранения в файле?
     
  25. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Этот код надо только поправить немного:
    Код (PHP):
    1. <?php
    2. $table = '';
    3. foreach($val as $table_row) {
    4.     $table .= "[{$table_row['account_id']}]\{"
    5.                 . "кол-во игр:{$table_row['role_i18n']},"
    6.                 . "побед:{$table_row['joined_at']},"
    7.                 . "и т.д.:{$table_row['role']}}\n";
    8. }
    9. echo $table;
    10. //или 
    11. // file_put_contents('table.txt', $table, FILE_APPEND);    
    P.S.: Не помню только надо экранировать } или нет?