2013-06-11 67 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運行它之後排序結果。