Как сделать код более грамотным?

Тема в разделе "PHP", создана пользователем Friendz, 24 сен 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Friendz

    Friendz Постоялец

    Регистр.:
    21 июл 2007
    Сообщения:
    130
    Симпатии:
    45
    Была тут тема, человек интересовался, как можно реализовать:
    http://www.nulled.ws/showthread.php?t=190934
    Подумал, что можно предложить и быдлокод, главное, чтоб задачу выполнял..
    Написал что-то, но тему закрыли.
    Теперь прошу более опытных людей посмотреть, как можно реализовать задачу более красиво и наглядно.
    PS (1.txt - исходный файл, 2.txt - блеклист, 3.txt - выхлоп), задача выше по ссылке.
    PHP:
    $input file("1.txt");
    $black file("2.txt");
    foreach (
    $black as $blackItem)
    {
        
    trims($blackItem);
        foreach (
    $input as $inputItem)
        {
            if (!
    preg_match_all("/$blackItem/si",$inputItem,$matches))
            {
                
    $input2[]=$inputItem;
            }
        }
        unset(
    $input);
        
    $input $input2;
        unset(
    $input2);
    }
    $file "3.txt";
    $fh fopen($file,"w+");
    foreach (
    $input as $resultItem)
    {
        
    fwrite($fh,$resultItem);
    }
    fclose($fh);
    function 
    trims(&$str)
    {
        
    $str=trim($str);
        
    $str=str_replace("\n","",$str);
        
    $str=str_replace("\r","",$str);
        
    $str=str_replace("\t","",$str);
        
    $str=stripslashes($str);
        return 
    $str;
    }
     
  2. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    вот пример, в неск. раз быстрее
    намного обгоняет софт ClearLinks (160 против 108 сек)(в тесте: 1,5M кеев/фильтр 2K слов)
    при отключенном match_case или partial работает медленней

    PHP:
    $k_file 'keys.txt';
    $bw_file 'badwords.txt';
    $match_case 'on'# on/off
    $partial 'on'# on/off - use fileparts

    set_time_limit(0); $t_start microtime(1);
    $r_file 'result_'.$k_file;
    if(
    $partial=='off'ini_set('memory_limit',"256M");
    $fp=fopen($k_file,'r'); $fp2=fopen($r_file,'w');
    $bw_list explode(PHP_EOL,trim(file_get_contents($bw_file)));
    while(!
    feof($fp)) { if($partial=='on')
    for (
    $i=0,$keys='';$i<840;$i++) $keys .= fgets($fp);
    else 
    $keysfread($fp,filesize($k_file));
    $keys=($match_case=='off') ? str_ireplace($bw_list,'#&%',$keys):
    str_replace($bw_list,'#&%',$keys); $keys explode(PHP_EOL,$keys);
    $keys preg_grep("/#&%/",$keys,PREG_GREP_INVERT);
    fputs($fp2,join(PHP_EOL,$keys)); } fclose($fp); fclose($fp2);
    echo 
    'completed in '.round((microtime(1)-$t_start),2).' sec';
     
    venetu нравится это.
  3. Sanja_

    Sanja_ Создатель

    Регистр.:
    9 окт 2009
    Сообщения:
    27
    Симпатии:
    8
    вот так можно по компактнее
    PHP:

    $input 
    file("1.txt"); 
    $black file("2.txt"); 
    $file "3.txt"
    foreach (
    $black as $blackItem

        
    rtrim($blackItem); 
        foreach (
    $input as $inputItem
        { 
            if (!
    preg_match("/$blackItem/si",$inputItem)) 
            { 
        
    file_put_contents($file,$resultItem);
    # чтоб на каждом круге дописовало надо третий параметр поставить FILE_APPEND

            

        } 


     
  4. Super_BOT

    Super_BOT

    Регистр.:
    21 апр 2009
    Сообщения:
    256
    Симпатии:
    28
    Этот вариант лучше и определенно быстрее остальных, так как не использует стандартные циклы, а тем более двойные, советую выбрать его
     
  5. _aleksey_

    _aleksey_

    Регистр.:
    14 июл 2008
    Сообщения:
    326
    Симпатии:
    20
    Как оказалось я только зря пытался изобретать велосипед. Бесплатный софт, который мне показывали вполне справляется с данными задачами. Даже если запускать под Вайном - все ок :)
     
Статус темы:
Закрыта.