2014-07-09 57 views
-3

我正在尋找一種方法來提取PHP中的字符串公共子字符串。例如,如果我有一個這樣的數組:在PHP中提取字符串之間的平等部分

$strings[0] = "the 1 o"; 
$strings[1] = "the 1 e"; 
$strings[2] = "the 2"; 
$strings[3] = "the rere"; 
$strings[4] = "the rere 2"; 
$strings[5] = "the rere1"; 
echo sametext($strings); 

我想要一個函數返回的所有字符串具有共同的部分。在這種情況下,它會返回「the」。

我至今是:

function find($string){ 
$same = array(); 
$let = str_split($string[0]); 

for($k=0 ; $k< count($string) ; $k++){ 
    $let2 = str_split($string[$k]); 
    for($i=0 ; $i< count($let) ; $i++){ 
     if($let[$i]==$let2[$i]){ 
      $same[$k] = $same[$k].$let[$i]; 
     } 
    } 
} 

最後我想構建了一句,如果我做

$strings[0] = "the black 1 o"; 
$strings[1] = "the blackr 1 e"; 
$strings[2] = "the black 1"; 
$strings[3] = "the black 1"; 
$strings[4] = "the black 1 2"; 
$strings[5] = "the black 1"; 
$all = array(); 

foreach($strings as $string) { 
    foreach(explode(' ', $string) as $value) { 
     $all[] = $value; 
    } 
} 

echo '<pre>'; 
$count = array_count_values($all); 
//echo max($count); 
$maxs = array_keys($count, max($count)); 
//echo $maxs; 
//arsort($count); 
print_r($maxs); 

的MAXS VAR將包含「的」和「1」,但我只想要

+1

你嘗試過什麼嗎?如果是這樣,告訴我們什麼。 – vascowhite

+0

聽起來,它需要大量的比較(只是想一下,有點)...除此之外,它會匹配單詞或字母嗎?如果是這樣,我將開始使用正則表達式來檢索字符串中的所有單詞(使用preg,'\ b'斷言可能很有用)。儘管如此,這聽起來像一個相當複雜的任務...... – Max

回答

0
$strings[0] = "the black 51 o"; 
$strings[1] = "the black 1 e"; 
$strings[2] = "the black 1"; 
$strings[3] = "the black 1"; 
$strings[4] = "the black 1 2"; 
$strings[5] = "the black 1"; 
$all = array(); 

foreach($strings as $string) { 
    foreach(explode(' ', $string) as $value) { 
     $all[] = $value; 
    } 
} 

//echo '<pre>'; 
$count = array_count_values($all); 
$final=''; 
$i=0; 
$k=0; 
//echo $count['the'].'2 1'.count($strings); 
foreach($count as $key=>$value) { 
    //echo $countw.' '.count($strings).' '; 
    if((int)$value == count($strings) && $i==$k){ 
     if($i==0){ 
      $final = $final.$key; 
      $i++; 
     } 
     else{ 
      $final = $final.' '.$key; 
      $i++; 
     } 
    } 
    $k++; 
} 
echo $final;