Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pronaci zajednicki prvi deo reci

[es] :: PHP :: Pronaci zajednicki prvi deo reci

[ Pregleda: 2127 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

stex

Član broj: 718
Poruke: 374
*.dynamic.sbb.rs.

Sajt: stivi.on.neobee.net


+21 Profil

icon Pronaci zajednicki prvi deo reci16.06.2013. u 22:23 - pre 132 meseci
Imam ovako nesto:
abcdeeee, abcke, abcye, abcpelk...

Ono sto meni treba je da dobijem samo prve zajednicke karaktere za odredjene reci. Znaci u ovom slucaju ce to biti "abc" bez obzira da li se posle jos neka slova poklapaju. Probao sam sa array_intersect_assoc (razbio sam svaku rec niz) ali time dobijam sva poklapanja. Nekad ce biti prva tri karaktera, nekad dva, nema pravila.
stivi.on.neobee.net
 
Odgovor na temu

Mladjox
Web Developer
Banja Luka

Član broj: 226253
Poruke: 35



+3 Profil

icon Re: Pronaci zajednicki prvi deo reci16.06.2013. u 23:22 - pre 132 meseci
http://php.net/manual/en/function.preg-match.php
 
Odgovor na temu

stex

Član broj: 718
Poruke: 374
*.static.zrlocal.net.

Sajt: stivi.on.neobee.net


+21 Profil

icon Re: Pronaci zajednicki prvi deo reci17.06.2013. u 10:16 - pre 132 meseci
Da, ali ne znam koji su to karakteri niti koliko ih ima u nizu.
stivi.on.neobee.net
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6279

Sajt: pedja.supurovic.net


+1571 Profil

icon Re: Pronaci zajednicki prvi deo reci17.06.2013. u 10:31 - pre 132 meseci
U regularnim izrazima ključ za pretragu je string pa ga možeš sastaviti kao i svaki drugi string, iz promenljivih.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Pronaci zajednicki prvi deo reci17.06.2013. u 11:01 - pre 132 meseci
Da li i dalje očekuješ magičnu funkciju koja to radi ili misliš da napišeš program?

Code (php):

<?php
function longest_prefix( $arr ){
     $pref=$arr[0];
     foreach( $arr as $str ) {
          $tmp='';
          for($i=0; $i<min(strlen($pref),strlen($str));$i++)
          if($pref[$i]==$str[$i]) $tmp=$tmp.$pref[$i];
          else break;
          $pref=$tmp;
     }


     return $pref;
}
$niz=array('abcdeeee', 'abcke', 'abcye', 'abcpelk');
echo longest_prefix($niz);
?>
 
 
Odgovor na temu

stex

Član broj: 718
Poruke: 374
*.static.zrlocal.net.

Sajt: stivi.on.neobee.net


+21 Profil

icon Re: Pronaci zajednicki prvi deo reci19.06.2013. u 08:09 - pre 132 meseci
Napisao sam funkciju, samo sam mislio da ima ima neko jednostavnije resenje.

djoka_i:
Slicno sam i ja napravio. Razbio svaku rec na karaktere i uporedjivao sa prvom. Samo moram da priznam da je tvoje resenje elegantnije.
stivi.on.neobee.net
 
Odgovor na temu

Tpojka
Ratio, Logic

Član broj: 60114
Poruke: 209

ICQ: 491318095


+33 Profil

icon Re: Pronaci zajednicki prvi deo reci20.06.2013. u 10:04 - pre 132 meseci
Elegantnije, ali ne funkcioniše (čitaj: ne vrši pos'o nad svakim nizom).
Ovako radi:
Code:

<?php
// provjera samo u odnosu na prvi element
function lcp($arr){
    $init = $arr[0];
    $prefix = array('');
    for($i=0;$i<strlen($init);$i++){
        $pref[$i] = substr($init, 0, $i+1);
    }
    foreach($arr as $item){
        if($item !== $init){
            foreach($pref as $testPattern){
                if($testPattern == substr($item, 0, strlen($testPattern)))
                    $prefix[] = $testPattern;
            }
        }
    }
    if (max($prefix)!=='')return max($prefix);else return 'No common prefixes.';
}

var_dump( lcp($arr = array('abcdeeee', 'bcke', 'acye', 'abpelk')) );
?>


-A Tpojke su Đuro - šta?
-Osnovne jedinice diverzantskih grupa!
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.rs.



+33 Profil

icon Re: Pronaci zajednicki prvi deo reci20.06.2013. u 20:07 - pre 132 meseci
Evo mog rešenja. Bez korišćenja PHP-ovih funkcija, mislim da je ovo najoptimalnije...
Code:
function longest_prefix(array $input) {
    $str = '';
    
    if (!empty($input)) {
        $i = 0;
        while(true) {
            $char = null;
            foreach ($input as $text) {
                if (!isset($text[$i])) {
                    break 2;
                }
                
                if ($char === null) {
                    $char = $text[$i];
                } elseif ($text[$i] != $char) {
                    break 2;
                }
            }
            
            $str .= $char;
            $i++;
        }
    }
    
    return $str;
}
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
*.dynamic.sbb.rs.

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Pronaci zajednicki prvi deo reci20.06.2013. u 23:27 - pre 132 meseci
Recimo ovako:
Code (php):

function lcp($array){
     $sample = array_pop($array);
     $max_len = strlen($sample);
     foreach($array as $word){
          for($i=0; $i < $max_len; $i++){
               if($sample[$i] != $word[$i]){
                    $max_len = $i;
               }
          }
     }
     return $i > 0 ? substr($sample, 0, $max_len) : false;
}
 


Nikolin primer je isto dobar, Tpojkin nije bas optimizovan.
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

[es] :: PHP :: Pronaci zajednicki prvi deo reci

[ Pregleda: 2127 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.