Advertisement
HPZK97

feqef

Oct 15th, 2019
555
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.40 KB | None | 0 0
  1. <?php
  2.  
  3. class XMLGenerator
  4. {
  5.  
  6.     // отступ n-ого уровня
  7.     private function indent($level)
  8.     {
  9.         $indent = '';
  10.         $delta = '   ';
  11.         for ($i = 0; $i < $level; $i++) $indent .= $delta;
  12.         return $indent;
  13.     }
  14.  
  15.     // генерация XML с отступами
  16.     private function generate_xml($info, $history)
  17.     {
  18.         $current_level = 0;
  19.         $result = self::indent($current_level) . "<?xml version=\"1.0\"?>\n";
  20.         $result .= self::indent($current_level) . "<customer name=\"{$info['name']}\" email=\"{$info['email']}\" phone=\"{$info['phone']}\">\n";
  21.         $current_level++;
  22.         foreach ($history as $order) {
  23.             $result .= self::indent($current_level) . "<order id=\"{$order['id']}\" date=\"" . date('H:i:s d-m-Y', $order['date']) . "\" total_price=\"{$order['totalPrice']}\">\n";
  24.             $current_level++;
  25.             foreach ($order['products'] as $product) {
  26.                 $result .= self::indent($current_level) . "<product>\n";
  27.                 $current_level++;
  28.                 $result .= self::indent($current_level) . "<name>{$product['name']}</name>\n";
  29.                 $result .= self::indent($current_level) . "<price>{$product['price']}</price>\n";
  30.                 $result .= self::indent($current_level) . "<qty>{$product['qty']}</qty>\n";
  31.                 $current_level--;
  32.                 $result .= self::indent($current_level) . "</product>\n";
  33.             }
  34.             $current_level--;
  35.             $result .= self::indent($current_level) . "</order>\n";
  36.         }
  37.         $current_level--;
  38.         $result .= self::indent($current_level) . "</customer>\n";
  39.  
  40.         return $result;
  41.     }
  42.  
  43.     // сгенерировать XML-файл
  44.     public static function generate_xml_file($info, $history)
  45.     {
  46.         $file = fopen('result.xml', 'w+');
  47.         fwrite($file, self::generate_xml($info, $history));
  48.         fclose($file);
  49.     }
  50.  
  51.     // возврат XML с отступами
  52.     public static function generate_xml_string_with_indents($info, $history)
  53.     {
  54.         return self::generate_xml($info, $history);
  55.     }
  56.  
  57.     // возврат XML без отступов и в одну строку
  58.     public static function generate_xml_string($info, $history)
  59.     {
  60.         return str_replace(self::indent(1), "", str_replace("\n", "", self::generate_xml($info, $history)));
  61.     }
  62. }
  63.  
  64. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement