【问题标题】:Merging several strings in PHP [closed]在 PHP 中合并多个字符串 [关闭]
【发布时间】:2013-06-07 22:23:47
【问题描述】:

我有很多服务器名称。有些名称包含 fqdn,有些则不包含。

单个字符串的列表如下所示:

  • 服务器A
  • serverA.something.com
  • 服务器A
  • 服务器B
  • serverB.something.com
  • 服务器C
  • serverD.something.com

我想像上面那样分析一组单独的字符串并返回 4 个结果:

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

基本上,如果我有多个服务器条目,我想保留较长的条目(包括 fqdn)。如果服务器的条目不包含 fqdn,我只想保留服务器名称。我不希望我的结果集中有任何重复项。任何建议都会被采纳。

【问题讨论】:

  • 你尝试过的正则表达式是什么?
  • 我没有。这是一个我不知道如何处理的问题。我可以轻松剥离 fqdn 并删除任何重复项。问题是保留 fqdn。请记住,我的实际列表包括 1000 多台服务器。
  • 定义“更长”更多子域?更多字母?
  • Longer 是指字符串长度。如果我有多个服务器条目,并且一个较长(包括 fqdn),那就是我需要保留的条目。
  • @prufrock 如果您有解决方案,请将其作为答案发布。

标签: php regex


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试一试,对我有用

    <?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)
    

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多