[ stex @ 16.06.2013. 22:23 ] @
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.
[ Mladjox @ 16.06.2013. 23:22 ] @
http://php.net/manual/en/function.preg-match.php
[ stex @ 17.06.2013. 10:16 ] @
Da, ali ne znam koji su to karakteri niti koliko ih ima u nizu.
[ Predrag Supurovic @ 17.06.2013. 10:31 ] @
U regularnim izrazima ključ za pretragu je string pa ga možeš sastaviti kao i svaki drugi string, iz promenljivih.
[ djoka_l @ 17.06.2013. 11:01 ] @
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);
?>
 
[ stex @ 19.06.2013. 08:09 ] @
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.
[ Tpojka @ 20.06.2013. 10:04 ] @
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')) );
?>

[ Nikola Poša @ 20.06.2013. 20:07 ] @
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;
}
[ pajaja @ 20.06.2013. 23:27 ] @
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.