Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нужно оптимизировать!
 
 автор: himera7   (16.12.2006 в 00:05)   письмо автору
 
 


<?php
//quotemeta
function cheak2char($sep$char_search, & $charZ)
{
  
$char_search2 quotemeta($char_search);



  
$start_pos=1;
  
$pos=array();


    
$k=0;

      while(
preg_match("|$char_search2|"$sep)!=0)
      {
         
$charZ[$k]=$char_search;
       
$pos[$k]=strpos($sep $char_search);
       
$sep preg_replace("|$char_search2|Uis""M",  $sep1);
       
$k++;
      }

  if(
$pos[0]==0)
  
$start_pos=0;
  
$m=1;
  
$i=0;
  
$i2=0;
  
$lim=count($charZ);
  while(
$i<$lim)
  {


    if(isset(
$pos[$i+$m]))
    
$temp_pos $pos[$i+$m] - $m;
    else
    {

    
$temp_pos=-1;
    }

      if(
$pos[$i]==$temp_pos)
      {
      
$charZ[$i2]=$charZ[$i2].$char_search;

      unset(
$charZ[$i2+1]);
      
$charZ=array_values($charZ);
      
//$lim=count($charZ);
    
$m++;
    
$i--;
      }
      else
      {
      
$i=$i+$m-1;
      
$m=1;
      
$i2++;
      }

      
$i++;

  }


  return 
$start_pos;

}

function 
Lchar_back(& $pieces$char$pos)
{
$limit=count($char);
 if(
$pos==0)
  
$i=0;
 else
  
$i=1;
$k=0;
  while(
$k<$limit)
  {
  
$pieces[$i]=$char[$k].$pieces[$i];
  
$k++;
  
$i++;

  }

}

function 
Rchar_back(& $pieces$char$pos)
{



$limit=count($char);
 if(
$pos==1)
 {
  
$i=0;
  while(
$i<$limit)
  {
  
$pieces[$i]=$pieces[$i].$char[$i];
  
$i++;
  }
 }
 else
 {
  
array_unshift($pieces$char[0]);
  
$i=1;
  while(
$i<$limit+1)
  {
  
$pieces[$i]=$pieces[$i].$char[$i-1];
  
$i++;
  }

 }


}

function 
array_add($pieces,& $separators$i)
 {

     
$shift=$i+1;
     
$temp_array =array_chunk($separators$shiftTRUE);
     
$first_array$temp_array[0];


     
$lim=count($temp_array);
    for(
$k=1;$k<$lim;$k++)
     {
         if(
$k==1)
         
$second_array $temp_array[$k];
         else
         
$second_array $temp_array[$k] + $second_array;

     }
    if(
is_array($second_array))
     
ksort($second_array);



   
$del_index=count($first_array)-1;
   
$lim=count($pieces);
    for(
$k=0;$k<$lim;$k++)
      
$first_array[$k+$del_index] = $pieces[$k];


    
$lim=count($first_array);

    if(
is_array($first_array) AND is_array($second_array))
    
$separators=array_merge($first_array $second_array);
    if(
is_array($first_array) AND is_array($second_array)==FALSE)
    {
     if(
$second_array!=NULL)
     {
      
$separators=$first_array;
      
$separators[$lim]=$second_array;
     }
     else
     
$separators=$first_array;


    }
   
// $separators= $first_array+$second_array;
   /*
  */
 
}

function 
char_lr(& $separators$i$char_search,  $int_mod$bool_lr)
{

  
$pos_start cheak2char($separators[$i], $char_search$return_Z);

  
$pieces explode($char_search$separators[$i]);
  
$pieces=array_values($pieces);
  
$lim=count($pieces);

  for(
$j=0;$j<$lim;$j++)
 {
   if(
$pieces[$j]==NULL OR preg_match("|^( )*$|Uis"$pieces[$j])!=0)
    unset(
$pieces[$j]);
 }
 
$pieces=array_values($pieces);
 if(
$bool_lr==0)
 
Lchar_back($pieces$return_Z$pos_start);
 else
 
Rchar_back($pieces$return_Z$pos_start);

 
array_add($pieces$separators$i);

}



function 
main_char(& $separators$i$left_str$bool_lr)
{
     
$left_str2 quotemeta($left_str);


      
$test_sep $separators[$i];
     
$left_bra=0;

     
$while_bool=0;

     while(
$while_bool==0)
     {
       if(
preg_match("|$left_str2|Uis"$test_sep)!=0)
       {

            
$test_sep preg_replace("|$left_str2|Uis""N",  $test_sep1);
            
$left_bra++;
       }

       if(
preg_match("|$left_str2|"$test_sep)==0)
       
$while_bool=1;
     }

     
$test_sep $separators[$i];
     
$test_sep preg_replace("|( )+|Uis"""$test_sep);
     
$test_sep preg_replace("|\\\|Uis"""$test_sep);
     
$len_test_sep=strlen($test_sep);
     if(
$len_test_sep>1)
     {

       if(
$left_bra>0)
       {
        
char_lr($separators$i$left_str$left_bra$bool_lr);
         
$limit count($separators);

       }


     }




}







$text_for str_replace("\r\n"' '$_POST['t_area']);
$text_for preg_replace("|\]\[|Uis""] ["$text_for);
$separators  preg_split ("/( )+/"$text_for);
$separators=array_values($separators);



$limit count($separators);


    for(
$i=0;$i<$limit;$i++)
    {
    
main_char($separators$i"["0);
    
$limit count($separators);
    }


    for(
$i=0;$i<$limit;$i++)
    {
    
main_char($separators$i"]"1);
    
$limit count($separators);
    }

         echo 
"<br>separators =<pre>";
         
print_r($separators);
         echo 
"<pre><br>";

?>



Вообщем это фаил получает текст формата "Word [] ][ Wo[rd [] ][ Wo]rd [][] ][sd][ ds[]] "

Вообщем какой то текст с "[" "]" и потом разделяет это текст на масив по разделителям " " , "[" "]"
все бы хорошо но когда текст больших размеров время работы может затянутся горазда больше 30 секунд а такю обработку мне приходится вызывать из другого фаила ни один раз нужно как нимбудб этот алгоритм оптимезировать

   
 
 автор: CrazyAngel   (16.12.2006 в 00:20)   письмо автору
 
   для: himera7   (16.12.2006 в 00:05)
 

Помоему вы хотите чтоб мы вам не помогли, а сделали за вас работу.... просто слишком много

   
 
 автор: Саня   (16.12.2006 в 03:20)   письмо автору
 
   для: himera7   (16.12.2006 в 00:05)
 

<?
$_POST
['t_area'] = "Word [] ][ Wo[rd [] ][ Wo]rd [][] ][sd][ ds[]]";

$txt str_replace(array(" ""[""]"), "\r\n"$_POST['t_area']);
$arr explode("\r\n"$txt);
foreach ( 
$arr as $val ) {
  
$trm trim($val);
  if ( !empty(
$trm) ) $new[] = $trm;
}
print_r($new);
Так сойдёт?

   
 
 автор: himera7   (17.12.2006 в 16:07)   письмо автору
 
   для: Саня   (16.12.2006 в 03:20)
 

не совсем ! ) но спасибо за помощь !
А насчет того что б сделать вместо меня я не прошу ! мне нужна помошь в том что б время занимало этот алгоритм меньше ! Допустим при использовании рег выражений в функциях
preg & ereg сами по себе много времени занимают по сравнению с str мне хотя бы что бы какие функции можно заменить на функции с префиксом str

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования