2013-06-11 68 views
-6

我有一个很大的服务器名称列表。有些名称包含fqdn,有些则不包含。在PHP中合并几个字符串

个别字符串列表看起来是这样的:

  • serverA的
  • serverA.something.com
  • serverA的
  • serverB上
  • serverB.something.com
  • 服务器C
  • serverD.something.com

我想分析一组独立的字符串像上面并取回4分的结果:

  • serverA.something.com
  • serverB.something.com
  • 服务器C
  • 服务器D
  • .something.com

本质上,如果我有一个服务器的多个条目,我想保持更长的o ne(包含fqdn)。如果服务器没有条目包含fqdn,我只想保留服务器名称。我不想在结果集中有任何重复项。任何建议都会被接受。

+0

什么是正则表达式你试过吗? – exussum

+0

我没有。这是一个我不知道如何处理的问题。我可以轻松地剥离fqdn并删除任何重复项目。问题在于保持fqdn。请记住我的实际列表包含1000多台服务器。 – prufrock

+0

定义“更长”的更多子域?更多信件? – exussum

回答

0

给一个去,对我的作品

<?php 
$test = array(); 
$test[]="serverA"; 
$test[]="serverA.something.com"; 
$test[]="serverA"; 
$test[]="serverB"; 
$test[]="serverB.something.com"; 
$test[]="serverC"; 
$test[]="serverD.something.com"; 
sort($test); 
$final = array(); 
$temp = "#"; 
for($i=0,$count = count($test);$i<$count;$i++){ 
    if(substr($test[$i], 0, strlen($temp)) == $temp) 
     $temp = $test[$i]; 
    else { 
    $final[] = $temp; 
    $temp = $test[$i]; 
    } 
} 
//unset first 
unset($final[0]); 
//add in last 
$final[] = $temp; 
var_dump($final); 
?> 

给了我这个

array 
    1 => string 'serverA.something.com' (length=21) 
    2 => string 'serverB.something.com' (length=21) 
    3 => string 'serverC' (length=7) 
    4 => string 'serverD.something.com' (length=21) 
0

我想你已经将列表作为PHP中的数组值。你如何解决它是通过使用rsort。第一个元素是一个kepper,然后你放下每个元素,然后在你的累加器中加入最后一个元素。要按照字母顺序排列它,您可以在通过array_reduce运行它之后排序结果。