2015-08-14 43 views
1

以下示例。在多个字符串中查找完全相同的字符串

我有一个这样的数组:

Array 
(
    [0] => vlakke lasflenzen PN6 
    [1] => vlakke lasflenzen PN10 
    [2] => vlakke lasflenzen PN16 
    [3] => vlakke lasflenzen PN25-40 
) 

我不知道是什么的字符串的一部分将是相同的。我不知道模式是否会保持不变。所以我不能在空间或某物上爆炸()。

我想尝试的是提取srting中的所有四个之间完全相同但在空间之间分割的部分。

因此,对于这个例子,我需要从四个字符串中提取'vlakke lasflenzen',基于它们的compasison。

谁能帮助我?

回答

3

您所说的问题也被称为the longest common substring problem。我发现an implementation for finding the longest common substring在字符串数组中。由于在原岗位,用法提到:

<?php 
$array = array(
    'PTT757LP4', 
    'PTT757A', 
    'PCT757B', 
    'PCT757LP4EV' 
); 
echo longest_common_substring($array); 
// => T757 
?> 

相关的代码:

function longest_common_substring($words) 
{ 
    $words = array_map('strtolower', array_map('trim', $words)); 
    $sort_by_strlen = create_function('$a, $b', 'if (strlen($a) == strlen($b)) { return strcmp($a, $b); } return (strlen($a) < strlen($b)) ? -1 : 1;'); 
    usort($words, $sort_by_strlen); 
    $longest_common_substring = array(); 
    $shortest_string = str_split(array_shift($words)); 
    while (sizeof($shortest_string)) { 
    array_unshift($longest_common_substring, ''); 
    foreach ($shortest_string as $ci => $char) { 
     foreach ($words as $wi => $word) { 
     if (!strstr($word, $longest_common_substring[0] . $char)) { 
      // No match 
      break 2; 
     } // if 
     } // foreach 
     $longest_common_substring[0].= $char; 
    } // foreach 
    array_shift($shortest_string); 
    } 
    // If we made it here then we've run through everything 
    usort($longest_common_substring, $sort_by_strlen); 
    return array_pop($longest_common_substring); 
} 
+1

很棒!由于OP想要按(最后一个)空格拆分,因此只需很小的添加:$ string = longest_common_substring($ array); echo substr($ string,0,strrpos($ string,'')); – sinisake

+0

谢谢。我也使用谷歌,但不知道问题的名称,因为我的母语不是英语。 谢谢你的解决方案。 – Dany

0

我终于有了自己的solutin工作。

$names = array[ 
    'vlakke lasflenzen PN6', 
    'vlakke lasflenzen PN10', 
    'vlakke lasflenzen PN16', 
    'vlakke lasflenzen PN25-40' 
]; 

$name = []; 
$parts = []; 
foreach ($names as $name) { 
    $parts[] = array_filter(explode(' ', $name)); 
} 

foreach ($parts[0] as $index => $part) { 
     $match = true; 
     foreach ($parts as $item) { 
       if ($item[$index] !== $part) 
         $match = false; 
     } 
     if ($match) 
       $name[] = ucfirst($part); 
} 


echo implode(' ', $name); 
# Output : "Vlakke Lasflenzen" 
相关问题