Wątek zablokowany 2014-10-17 08:33 przez dzek69.

Dzielenie stringa według kilku separatorów

0

Mam taki problem wiem, że istnieje funkcja explode(), która dzieli łańcuch znakow według jednego separatora, ale ja potrzebuje podzielić łąńcuch według kilku separatorów, a dokłądnie takich jak ", .()" więc napisałęm własną funkcję wygląda ona tak.

  function podziel($text) {
    $j = 0;
    $text2 = "";
    for($i=0;$text[$i] != "";$i++) {
    if ($text[$i] == " " or $text[$i] == "(" or $text[$i] == ")" or $text[$i] == "," or $text[$i] == "." ) {
        $j++;
    }
    else {
        $text2[$j] .= $text[$i];
    }
    
    }
  
    return $text2;
  } 

Wszystko jest dobrze dla np. taki strongów jak "ale ma kota", ale jak już jest taki string "ala ma kota" to już zwraca błędne wartości dla czegoś takiego.

0

Poprawione na szybko bez zastanowienia:

function isSeparator( $char ) {
      return ($char == " " or $char == "(" or $char == ")" or $char == "," or $char == ".");
}

function podziel($text) {
    $j = 0;
    $text2 = "";
    for($i=0;$text[$i] != "";$i++) {
    if ( isSeparator( $text[$i] ) {
        $j++;
        $i++;
        while( isSeparator( $text[$i] ) and $text[$i] != "" ) ++$i
    }

    $text2[$j] .= $text[$i];
 
    }
 
    return $text2;
  } 
0

Z tą funkcją isSeparator nie chce działać to wziąłem bez tej funkcji i warunki dałem bezpośrednio w instrukcji if i pętli i po tym dostaje taki wynik dla stringu "ala ma kota" w pierwszym elemencie tablicy jest "ala" ale w drugim jest "a" czyli też coś źle działa.

0

Teraz mam inny problem z tą funkcją, a mianowicie przy jej wykonywaniu do pliku error.log zapisuje się dużo ostrzeżeń takich jak np.

 [Thu Feb 13 13:34:23 2014] [error] [client 127.0.0.1] PHP Notice:  Uninitialized string offset: 129 in /var/www/programowanie/wyszukiwanie.php on line 52, referer: http://127.0.0.1/programowan
[Thu Feb 13 13:34:23 2014] [error] [client 127.0.0.1] PHP Notice:  Uninitialized string offset: 129 in /var/www/programowanie/wyszukiwanie.php on line 52, referer: http://127.0.0.1/programowan
[Thu Feb 13 13:34:23 2014] [error] [client 127.0.0.1] PHP Notice:  Uninitialized string offset: 129 in /var/www/programowanie/wyszukiwanie.php on line 52, referer: http://127.0.0.1/programowan
[Thu Feb 13 13:34:23 2014] [error] [client 127.0.0.1] PHP Notice:  Uninitialized string offset: 129 in /var/www/programowanie/wyszukiwanie.php on line 52, referer: http://127.0.0.1/programowan
[Thu Feb 13 13:34:23 2014] [error] [client 127.0.0.1] PHP Notice:  Uninitialized string offset: 129 in /var/www/programowanie/wyszukiwanie.php on line 52, referer: http://127.0.0.1/programowan
[Thu Feb 13 13:34:23 2014] [error] [client 127.0.0.1] PHP Notice:  Uninitialized string offset: 129 in /var/www/programowanie/wyszukiwanie.php on line 55, referer: http://127.0.0

funkcja wygląda tak

function podziel($text) {
    $j = 0;
    $text2 = "";
    $ogranicznik = strlen($text);
    //print $ogranicznik;
    for($i=0;$ogranicznik >= $i;$i++) {
    if ( $text[$i] == " " or $text[$i] == "(" or $text[$i] == ")" or $text[$i] == "," or $text[$i] == ".") {
        $j++;
        $i++;
        while( ($text[$i] == " " or $text[$i] == "(" or $text[$i] == ")" or $text[$i] == "," or $text[$i] == ".")  ) ++$i;
    }
    
        $text2[$j] .= $text[$i];
    
 
    }
 
    return $text2;
  } 
 

A ostrzeżenie dotyczy pętli

while( ($text[$i] == " " or $text[$i] == "(" or $text[$i] == ")" or $text[$i] == "," or $text[$i] == ".")  ) ++$i;

Nie było by nic złego w tym, ale plik error.log po wykonaniu tego skryptu ma bardzo dużą wielkość.

0

strzelam:

for($i=0;$ogranicznik > $i;$i++) {

nawet nie chce mi się tego analizować głębiej

1 użytkowników online, w tym zalogowanych: 0, gości: 1