2013-06-11 3 views
-6

У меня есть большой список имен серверов. Некоторые имена включают fqdn, некоторые - нет.Слияние нескольких строк в PHP

Перечень отдельных строк выглядит примерно так:

  • SERVERA
  • serverA.something.com
  • SERVERA
  • ServerB
  • serverB.something.com
  • ServerC
  • serverD.something.com

Я хотел бы проанализировать группу отдельных строк, как и выше, и получить обратно 4 результаты:

  • serverA.something.com
  • serverB.something.com
  • ServerC
  • ServerD .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. первый элемент - это кеппер, и вы удаляете каждый элемент после этого prefxies последнего в вашем аккумуляторе. Чтобы получить его в алфавитном порядке, вы сортируете результат после запуска массива array_reduce.

Смежные вопросы