1. PHP / Говнокод #2009

    +155.2

    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
    function search($source,$text)
    {
    
    $result = false;
    
    $searchfilms = "#<a class=\"all\" href=\"/level/1/film/(.*?)a>#si";
    $searchfilms2 = "#<font color=\"\#999999\">(.*?)</font>#si";
    
      while (preg_match_all ($searchfilms, $source, $matches))
      {
        preg_match_all($searchfilms2, $source, $matches2);
        foreach ($matches as $key => $temparray)
        foreach ($temparray as $key2 => $tempresult){
        $result[$key2] = $tempresult;
        $result[$key2] = preg_replace("#(.*?)/sr/1/\">(.*?)</#is", "<a href=\"?id=\\1\">\\2</a>", $result[$key2])."   ".$matches2[$key][$key2];
        }
     return $result;
      }
    }
    
    
    Парсер результатов с кинопоиска, отсюдова: http://bit-torrent.kiev.ua/arser_kinopoisk_ru-t3637/index.html
    Может я что-то не понимаю, но зачем так извращаться совсем не ясноне ясно, 3 вложенных  цикла О_о.   preg_match в while зачем совсем не ясно.
    
    Короче чтобы добавить сюда еще и год фильма, пришлось переписать... А хотелось AFAIK :)
    
    Короче AFAIK вышло вот так:
    
    
    function search($source, $text) {
    
    	$result = array();
    
    	$searchfilms = 	"#<a class=\"all\" href=\"/level/1/film/(.*?)/.*?>(.*?)<.*?a>.*?(\d{4}).*?#si";
    	$searchfilms2 = "#<font color=\"\#999999\">(.*?)</font>(.*?)#si";
    
    	preg_match_all ($searchfilms, $source, $matches);
    	preg_match_all($searchfilms2, $source, $matches2);
    
    	foreach ($matches[1] as $key => $temparray) {
    		$id = $matches[1][$key];
    		$name = $matches[2][$key];
    		$name_eng = $matches2[1][$key];
    		$year = $matches[3][$key];
    		
    		$result[] =  "<a href=\"?id=$id\">$name..$name_eng...($year)</a>";	
    	}
    
    	return $result;
    }
    
    p.s. ИМХО читабельнее в разы

    Запостил: netdog, 21 Октября 2009

    Комментарии (10) RSS

    • таки afaik или asap?
      Ответить
    • Юбилейный кусок кода. 2009-й.
      Ответить
    • Имена переменных вида $searchfilms, $searchfilms2 являются признаками говнокода.
      Ответить
      • да это не самое страшно :) Если разбираться в суть что оно делает
        Ответить
        • Еще 8 лет назад меня учили, что имя переменной, функции, класса должны однозначно говорить об их назначении.
          Ответить
    • Просто некоторые не умеют пользоваться regEx...
      Ответить

    Добавить комментарий