1. Лучший говнокод

    В номинации:
    За время:
  2. PHP / Говнокод #18176

    +145

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    <?
    for ($i = 1; $i <= 100; $i++) {
        $t1 = $i / 3;
        $t2 = $i / 5;
        if (preg_match("/\./", "$t1") == false && preg_match("/\./", "$t2") == false) {
            echo "FizzBuzz<br>";
        } else {
            if (preg_match("/\./", "$t1") == false) {
                echo "Fizz<br>";
            } else {
                if (preg_match("/\./", "$t2") == false) {
                    echo "Buzz<br>";
                } else {
                    echo "$i<br>";
                }
            }
        }
    }
    ?>

    ZF...

    Yshk, 15 Мая 2015

    Комментарии (2)
  3. Java / Говнокод #18175

    +144

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    private static class NoNullListMap<KEY, VALUES> extends HashMap<KEY, List<VALUES>> {
            @Override
            public List<VALUES> get(Object key) {
                List<VALUES> res = super.get(key);
                if (res == null) {
                    res = new ArrayList();
                    super.put((KEY) key, res);
                }
                return res;
            }
        }

    мапа, возвращающая пустые списки вместо null

    olegsemeniuk, 15 Мая 2015

    Комментарии (2)
  4. JavaScript / Говнокод #18170

    +143

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    <script type="text/javascript">
    	function Show(a) {
    	        obj1=document.getElementById("mydiv1");
    	        obj2=document.getElementById("mydiv2");
    	        obj3=document.getElementById("mydiv3");
    	        obj4=document.getElementById("mydiv4");
    	        obj5=document.getElementById("mydiv5");
    	        uslugia=document.getElementById("uslugi");
    	        uslugib=document.getElementById("uslugi1");
    	        if (a == 1 || a == 2 || a == 3 || a == 4) {obj1.style.display="block"; uslugia.style.display="block"; infa.style.display="block";
    	        obj5.style.display="none"; uslugib.style.display="none";
    			}
    			if (a == 5) {obj5.style.display="block"; infa.style.display="block";
    	        obj1.style.display="none"; uslugia.style.display="none";
    			}
    			calc ();
    		}
    
    	function ShowServices(a) { 		
    			if (a == 'premium') {
    				console.log ("a")
    				us1.checked = us2.checked = us3.checked = us4.checked = us5.checked = false
    				us1.disabled = us2.disabled = us3.disabled = us4.disabled = us5.disabled = true;
    			} else {
    				console.log ("b")
    				us1.disabled = us2.disabled = us3.disabled = us4.disabled = us5.disabled = false;
    			}
    			if (a == 'premium5') {
    				uslugi1.style.display="block"
    			} else {
    				uslugi1.style.display="none"
    			}
    			if (a == 'min' || a == 'stan' || a == 'premium' || a == 'min5' || a == 'stan5' || a == 'premium') {
    				infa.style.display="none";
    			} 
    
    
    			calc ();
    		}
    
    	function ShowUs(a) {
    			{calc();};
    		}
    
    	function ShowV (a) {
    			if (a == 1 || a == 2 || a == 3 || a == 4) {
    				min5.checked = stan5.checked = prem5.checked = false;
    			} 
    			if (a == 5) {
    				min1.checked = stan1.checked = prem1.checked = false;
    			}
    		}
    
    	function calc() {
    			var d = document, usl1 = usl2 = usl3 = usl4 = usl5 = ull1 = ull2 = 0;
    			var 
    			min1 = d.getElementById("min1"),
    			stan1 = d.getElementById("stan1"),
    			prem1 = d.getElementById("prem1"),
    			min5 = d.getElementById("min5"),
    			stan5 = d.getElementById("stan5"),
    			prem5 = d.getElementById("prem5"),
    			us1 = d.getElementById("us1"),
    			us2 = d.getElementById("us2"),
    			us3 = d.getElementById("us3"),
    			us4 = d.getElementById("us4"),
    			us5 = d.getElementById("us5"),
    			result = d.getElementById("result");
    
    			console.log ('c');
    
    			if (us1.checked) usl1 = +us1.value;
    			if (us2.checked) usl2 = +us2.value;
    			if (us3.checked) usl3 = +us3.value;
    			if (us4.checked) usl4 = +us4.value;
    			if (us5.checked) usl5 = +us5.value;
    			if (min1.checked) cina = +min1.value;
    			if (stan1.checked) cina = +stan1.value;
    			if (prem1.checked) cina = +prem1.value;
    			if (min5.checked) cina = +min5.value;
    			if (stan5.checked) cina = +stan5.value;
    			if (prem5.checked) cina = +prem5.value;
    			if (ul1.checked) ull1 = +ul1.value;
    			if (ul2.checked) ull2 = +ul2.value;
    			
    			result.innerHTML = Math.ceil(cina + usl1 + usl2 + usl3 + usl4 + usl5 + ull1 +ull2);
    		};
    
    
    	document.body.onload = function() {
    			console.log ('d');
    			calc ();
    		}
    
    </script>

    Пишу сайт, опыт программирования нулевой, но 2 сайта уже сделал...
    Решил показать свой код, так как точно чувствую что он подходит для этого сайта =)

    MegaMax, 14 Мая 2015

    Комментарии (2)
  5. PHP / Говнокод #18149

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    public function api() {
    	...
    	if ($this->validate()) {
    		if ($store_info) {
    			$url = $store_info['ssl'];
    		} else {
    			$url = HTTPS_CATALOG;
    		}
    		if (isset($this->session->data['cookie']) && isset($this->request->get['api'])) {
    			...
    			$curl = curl_init();
    			// Set SSL if required
    			if (substr($url, 0, 5) == 'https') {
    				curl_setopt($curl, CURLOPT_PORT, 443);
    			}
    			curl_setopt($curl, CURLOPT_HEADER, false);
    			curl_setopt($curl, CURLINFO_HEADER_OUT, true);
    			curl_setopt($curl, CURLOPT_USERAGENT, $this->request->server['HTTP_USER_AGENT']);
    			curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    			curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    			curl_setopt($curl, CURLOPT_FORBID_REUSE, false);
    			curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    			curl_setopt($curl, CURLOPT_URL, $url . 'index.php?route=' . $this->request->get['api'] . ($url_data ? '&' . http_build_query($url_data) : ''));
    			if ($this->request->post) {
    				curl_setopt($curl, CURLOPT_POST, true);
    				curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->request->post));
    			}
    			curl_setopt($curl, CURLOPT_COOKIE, session_name() . '=' . $this->session->data['cookie'] . ';');
    			$json = curl_exec($curl);
    			curl_close($curl);

    API в опенкарте. Ну, короч, приходит пользователь, дергает АПИ, а я сам в контроллере дергаю свое АПИ. Такая практика.

    https://github.com/opencart/opencart/blob/4a151334efc702729071bd8d45a7e4af4e07b3ef/upload/admin/controller/sale/order.php#L2152

    Fike, 12 Мая 2015

    Комментарии (2)
  6. C++ / Говнокод #18139

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    typedef enum {
            INIT1=0, INIT2,  INIT3,  INIT4,  INIT5,  INIT6,  INITN,
            BIND1,   BIND2,  BIND3,  BIND4,  BIND5,  BIND6,  BINDN,
            YIELD1,  YIELD2, YIELD3, YIELD4, YIELD5, YIELD6, YIELDN, 
            COMPARE, CHECK, FILTER, CFILTER, PFILTER, CHOOSE, NOOP, CONTINUE,
            GET_ENODE, 
            GET_CGR1, GET_CGR2, GET_CGR3, GET_CGR4, GET_CGR5, GET_CGR6, GET_CGRN,
            IS_CGR
        } opcode;
    ...
    ...
    ...
    
    
    
            switch (m_pc->m_opcode) {
            case INIT1:
                m_app          = m_registers[0];
                if (m_app->get_num_args() != 1)
                    goto backtrack;
                m_registers[1] = m_app->get_arg(0);
                m_pc = m_pc->m_next;
                goto main_loop;
                
            case INIT2:
                m_app          = m_registers[0];
                if (m_app->get_num_args() != 2)
                    goto backtrack;
                m_registers[1] = m_app->get_arg(0);
                m_registers[2] = m_app->get_arg(1);
                m_pc = m_pc->m_next;
                goto main_loop;
                
            case INIT3:
                m_app          = m_registers[0];
                if (m_app->get_num_args() != 3)
                    goto backtrack;
                m_registers[1] = m_app->get_arg(0);
                m_registers[2] = m_app->get_arg(1);
                m_registers[3] = m_app->get_arg(2);
                m_pc = m_pc->m_next;
                goto main_loop;
                
            case INIT4:
                m_app          = m_registers[0];
                if (m_app->get_num_args() != 4)
                    goto backtrack;
                m_registers[1] = m_app->get_arg(0);
                m_registers[2] = m_app->get_arg(1);
                m_registers[3] = m_app->get_arg(2);
                m_registers[4] = m_app->get_arg(3);
                m_pc = m_pc->m_next;
                goto main_loop;
                
            case INIT5:
                m_app          = m_registers[0]; 
                if (m_app->get_num_args() != 5)
                    goto backtrack;
                m_registers[1] = m_app->get_arg(0);
                m_registers[2] = m_app->get_arg(1);
                m_registers[3] = m_app->get_arg(2);
                m_registers[4] = m_app->get_arg(3);
                m_registers[5] = m_app->get_arg(4);
                m_pc = m_pc->m_next;
                goto main_loop;
                
            case INIT6: 
                m_app          = m_registers[0];
                if (m_app->get_num_args() != 6)
                    goto backtrack;
                m_registers[1] = m_app->get_arg(0);
                m_registers[2] = m_app->get_arg(1);
                m_registers[3] = m_app->get_arg(2);
                m_registers[4] = m_app->get_arg(3);
                m_registers[5] = m_app->get_arg(4);
                m_registers[6] = m_app->get_arg(5);
                m_pc = m_pc->m_next;
                goto main_loop;
                
            case INITN:
                m_app      = m_registers[0];
                m_num_args = m_app->get_num_args();
                if (m_num_args != static_cast<const initn *>(m_pc)->m_num_args)
                    goto backtrack;
                for (unsigned i = 0; i < m_num_args; i++)
                    m_registers[i+1] = m_app->get_arg(i);
                m_pc = m_pc->m_next;
                goto main_loop;

    Из изходников STM-солвера Z3
    https://github.com/Z3Prover/z3/blob/master/src/smt/mam.cpp#L2298
    Почему нельзя было оставить только вариант INITN? Цикл отбирает так много ресурсов?

    j123123, 10 Мая 2015

    Комментарии (2)
  7. C++ / Говнокод #18107

    +148

    1. 1
    2. 2
    //G++ now allows typename in a template template parameter.
        template<template<typename> typename X> struct D; // xzibit.jpeg

    Пятый gcc вышел. Больше крестоблядства за те же деньги.
    https://gcc.gnu.org/gcc-5/changes.html

    3.14159265, 02 Мая 2015

    Комментарии (2)
  8. PHP / Говнокод #18093

    +132

    1. 1
    2. 2
    $result = mysql_query("INSERT INTO `selled` (`user`, `ip`, `date`, `name`, `mail`, `company`, `phone`, `phone2`, `sum`, `country`, `state`, `town`, `indexcountry`, `allcountry`, `payment`, `dost`) VALUES 
    	('".mysql_real_escape_string($_COOKIE['user'])."', '$_SERVER[REMOTE_ADDR]', NOW(), '".mysql_real_escape_string($_POST['name'])."', '".mysql_real_escape_string($_POST['mail'])."', '".mysql_real_escape_string($_POST['company'])."', '".mysql_real_escape_string($_POST['phone'])."', '".mysql_real_escape_string($_POST['phone2'])."', '".mysql_real_escape_string($_GET['sum'])."', '".mysql_real_escape_string($_POST['country'])."', '".mysql_real_escape_string($_POST['state'])."', '".mysql_real_escape_string($_POST['town'])."', '".mysql_real_escape_string($_POST['indexcountry'])."', '".mysql_real_escape_string($_POST['allcountry'])."', '".mysql_real_escape_string($_POST['paymethod'])."', '".mysql_real_escape_string($_POST['dost'])."')");

    Добавление товара

    ponchic, 30 Апреля 2015

    Комментарии (2)
  9. Куча / Говнокод #18054

    +141

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    func (db *DB) CountResults(filial []int64, device []int64, workplace []int64, from time.Time, to time.Time, splits bool, skip int64) (res []*AvgResults, err error) {
    
    	var query string
    	var rows *pgx.Rows
    
    	_, err = db.Exec("SET LOCAL TIME ZONE 'Asia/Yekaterinburg';")
    	if err != nil {
    		return nil, err
    	}
    
    	switch {
    	case splits:
    		query = `WITH data AS (SELECT "IndicatorResultValue"."IndicatorId", "qm"."Session"."Blocked", "qm"."Result"."SessionId" AS "SessionId", "qm"."DeviceIPRangeType"."Number" AS "RangeType", "qm"."DeviceIPRangeType"."Id" AS "RangeTypeId", "qm"."BranchWorkPlace"."Id" AS "WorkPlaceId", "DeviceIPRange"."BranchId", date("Datetime") as "Date"
      			FROM qm."Result"
      			LEFT OUTER JOIN "qm"."Device" ON ("Result"."DeviceId" = "Device"."Id")
      			LEFT OUTER JOIN "qm"."BranchWorkPlace" ON ("BranchWorkPlace"."Id" = "Device"."WorkPlaceId")
      			LEFT OUTER JOIN "qm"."Session" ON ("Result"."SessionId" = "Session"."Id")
      			LEFT OUTER JOIN "qm"."IndicatorResultValue" ON ("Result"."IndicatorResultValueId" = "IndicatorResultValue"."Id")
      			LEFT OUTER JOIN "qm"."ResultValue" ON ("IndicatorResultValue"."ResultValueId" = "ResultValue"."Id")
      			LEFT OUTER JOIN "qm"."DeviceIPRangeType" ON ("DeviceIPRangeType"."Id" = "Session"."DeviceIPRangeTypeId")
      			LEFT OUTER JOIN "qm"."DeviceIPRange" ON ("Session"."DeviceIPRangeId" = "DeviceIPRange"."Id") 	
      			FULL OUTER JOIN "queue"."Branches" ON ("DeviceIPRange"."BranchId" = "Branches"."Id" AND (0 = any ($1::int8[]) OR "Branches"."Id" = any($1::int8[])))),
    			data1 AS (SELECT COUNT(DISTINCT(data."SessionId")) AS "Count", 
    	 		"BranchId", 
    	  		CASE WHEN "RangeTypeId" < 3 THEN 0
                	ELSE "RangeTypeId"
    	  		END,  
    	  		"Date"
    	  		FROM data
    	  		WHERE (0 = any($2::int8[]) OR "RangeType" = any($2::int8[]))
    	   		AND (0 = any ($1::int8[]) OR "BranchId" = any($1::int8[]))
    	   		AND (0 = any($3::int8[]) OR "WorkPlaceId" = any($3::int8[]))
    	   		AND "Date" BETWEEN $4::timestamptz AND $5::timestamptz
    	   		AND NOT "Blocked"
    	  		GROUP BY "BranchId", CASE WHEN "RangeTypeId" < 3 THEN 0 ELSE "RangeTypeId" END, "Date"),  
    			data2 AS (SELECT "Id", "Name", date("d") AS "Date" FROM
    			queue."Branches"
    			CROSS JOIN generate_series($4::timestamptz, $5::timestamptz, $6) as "d" 
    			WHERE (0 = any ($1::int8[]) OR "Id" = any($1::int8[])) ),	            
    			data3 AS (SELECT "Count" AS C, 0 AS Avg, data1."Date", data1."RangeTypeId", data1."BranchId"
    			FROM "data1" GROUP BY "data1"."Date", "Count", "data1"."BranchId", "data1"."RangeTypeId"),
    			data3_1 AS (SELECT "qm"."DeviceIPRangeType"."Id" FROM "qm"."DeviceIPRange"
    			RIGHT OUTER JOIN "qm"."DeviceIPRangeType" ON ("qm"."DeviceIPRange"."DeviceIPTypeId" = "qm"."DeviceIPRangeType"."Id")
    			WHERE (0 = any ($1::int8[]) OR "DeviceIPRange"."BranchId" = any($1::int8[]))
    			GROUP BY "qm"."DeviceIPRangeType"."Id"),
    			data4 AS (SELECT "Id", "Name", date("d") AS "Date" FROM
    			"qm"."DeviceIPRangeType"
    			CROSS JOIN generate_series($4::timestamptz, $5::timestamptz, $6) as "d"
    			WHERE "Id" > 2 AND (0 = any($2::int8[]) OR "Number" = any($2::int8[])) AND "Id" IN (SELECT "Id" FROM data3_1)),
    			data5 AS (SELECT coalesce(c, 0) AS C, coalesce(avg, 0) AS Avg, coalesce("data2"."Date", "data3"."Date") AS date, "data2"."Name", "data3"."RangeTypeId" FROM
    			data2
    			FULL OUTER JOIN data3 ON ("data3"."BranchId" = "data2"."Id" AND "data3"."Date" = "data2"."Date"))
    			SELECT array_agg(coalesce(c, 0) ORDER BY coalesce("data5"."date", "data4"."Date")) AS "Count",
           		array_agg(coalesce(avg::double precision, 0::double precision) ORDER BY coalesce("data5"."date", "data4"."Date")) AS "Avg",
           		array_agg(coalesce("data5"."date", "data4"."Date") ORDER BY coalesce("data5"."date", "data4"."Date"))::timestamptz[] AS "Date",
           		coalesce("data5"."Name", "data4"."Name") AS "Name" FROM data5
    			FULL OUTER JOIN data4 ON ("data4"."Id" = "data5"."RangeTypeId" AND "data5"."date" = "data4"."Date")
    			WHERE coalesce("data5"."Name", "data4"."Name") IS NOT NULL
    			GROUP BY coalesce("data5"."Name", "data4"."Name")
    			ORDER BY coalesce("data5"."Name", "data4"."Name")`
    	default:
    		query = `WITH data AS (SELECT "IndicatorResultValue"."IndicatorId", "qm"."Session"."Blocked", "qm"."Result"."SessionId" AS "SessionId", "qm"."DeviceIPRangeType"."Number" AS "RangeType", "qm"."DeviceIPRangeType"."Id" AS "RangeTypeId", "qm"."BranchWorkPlace"."Id" AS "WorkPlaceId", "DeviceIPRange"."BranchId", date("Datetime") as "Date"
    	 		FROM qm."Result"
    	 		LEFT OUTER JOIN "qm"."Device" ON ("Result"."DeviceId" = "Device"."Id")
    	 		LEFT OUTER JOIN "qm"."BranchWorkPlace" ON ("BranchWorkPlace"."Id" = "Device"."WorkPlaceId")
    	 		LEFT OUTER JOIN "qm"."Session" ON ("Result"."SessionId" = "Session"."Id")
    	 		LEFT OUTER JOIN "qm"."IndicatorResultValue" ON ("Result"."IndicatorResultValueId" = "IndicatorResultValue"."Id")
    	 		...

    Код для БД на go

    g2347933, 24 Апреля 2015

    Комментарии (2)
  10. PHP / Говнокод #18049

    +142

    1. 1
    2. 2
    3. 3
    function getPLpgSqlUpdateTimestampFuncTpl() {
    //
    }

    а не сильно ли информативно?

    artembegood, 23 Апреля 2015

    Комментарии (2)
  11. PHP / Говнокод #18041

    +144

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    //Один протокол хранится в базе в виде трех записей для каждого из типов экзаменов
    //Чтобы 3 записи превратить в одну подменяем ключ из массива запроса ($result) на id заявки ($request_id)
    //Записи с одинаковыми id перезаписываются, а запись с датой и счетом попадают в нужную колонку
    foreach($this->type as $type)
    {
              $csv_array[$request_id]['Дата начала, '.$type] = $csv_array[$request_id]['Дата начала, '.$type];
              $csv_array[$request_id]['Решение, '.$type] = $csv_array[$request_id]['Решение, '.$type];
              $csv_array[$request_id]['Счет, '.$type] = $csv_array[$request_id]['Счет, '.$type];
    }

    магия

    d1ma, 22 Апреля 2015

    Комментарии (2)