| |
|
|
| |
<?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", $sep, 1);
$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, $shift, TRUE);
$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_sep, 1);
$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 секунд а такю обработку мне приходится вызывать из другого фаила ни один раз нужно как нимбудб этот алгоритм оптимезировать | |
| |
|
|
| |
|
|
| |
для: himera7
(16.12.2006 в 00:05)
| | | Помоему вы хотите чтоб мы вам не помогли, а сделали за вас работу.... просто слишком много | |
| |
|
|
| |
|
|
| |
для: 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);
| Так сойдёт? | |
| |
|
|
| |
|
|
| |
для: Саня
(16.12.2006 в 03:20)
| | | не совсем ! ) но спасибо за помощь !
А насчет того что б сделать вместо меня я не прошу ! мне нужна помошь в том что б время занимало этот алгоритм меньше ! Допустим при использовании рег выражений в функциях
preg & ereg сами по себе много времени занимают по сравнению с str мне хотя бы что бы какие функции можно заменить на функции с префиксом str | |
| |
|
|
|