从两个单词的字符串中获取第一个字母(PHP - 最快的方式)

时间:2015-09-17 14:54:25

标签: php string

如果我有一组两个单词(以空格分隔),例如:

$str='nice couple';

从每个单词中获取第一个字母的最快(用于服务器处理)方法是什么? IE浏览器。最终结果应该是:

  

NC

我知道我可以拿$ str [0]并且获得第一个字符(' n)是最快的,但是如何获得第二个字符(' c')一个快速的方式,以便我进入最后' nc'

4 个答案:

答案 0 :(得分:3)

Firts用空格分隔单词,然后获得第一个char。

<?php
$str = 'nice couple';
$words = explode(' ', $str);
$result = $words[0][0]. $words[1][0];
echo $result;

至于性能,另一种方式是使用正则表达式,但正如在这个帖子中讨论的那样:

Which is more efficient, PHP string functions or regex in PHP?

进行简单操作的最佳和最快的方法是使用标准功能。

Halcyon回复更新

Halcyon是对的。我做了一个测试来检查哪个解决方案更快:

<?php

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

function solution1($text)
{
    for($i=1; $i<1000000; $i++) {
        $str = "nice couple";
        $pos = strpos(" ", $str);
        $result = $str[0] . $str[$pos + 1];
    }
}

function solution2($text)
{
    for($i=1; $i<1000000; $i++) {
        $str = 'nice couple';
        $words = explode(' ', $str);
        $result = $words[0][0]. $words[1][0];
    }
}

$text = 'Administration\Controller\UserController::Save';

$time_start = microtime_float();

solution1($text);

$time_end = microtime_float();
$time = $time_end - $time_start;

echo "Did solution1 in $time seconds.\n";

$time_start = microtime_float();

solution2($text);

$time_end = microtime_float();
$time = $time_end - $time_start;

echo "Did solution2 in $time seconds.\n";

对于1000000次迭代,我的解决方案将时间加倍:

解决方案1在0.61092305183411秒。 解决方案2在1.0136380195618秒。

所以Halcyon提案更快:

$str = "nice couple";
$pos = strpos(" ", $str);
$result = $str[0] . $str[$pos + 1];

答案 1 :(得分:1)

这是我认为最快的方法:

$str = "nice couple";
$pos = strpos($str, " ");
$result = $str[0] . $str[$pos + 1];

它比使用爆炸更快,因为爆炸会带来你不需要的额外工作。这反映在一个简单的基准测试中。

对于1,000,000次迭代,爆炸大约慢了500ms。这也表明,除非你的输入非常大,否则你使用哪种方法并不重要。

如果你绝对想在这里坚持下去,你可以对空间角色进行有根据的搜索,从中间开始并涟漪 - 假设空间角色预计在中间。我不知道这是否真的更快(主要瓶颈可能是$str[$index]的速度),但从概念上看似乎更快。 strpos是一个本机函数,虽然它可能围绕您在PHP中可以执行的任何操作。

如果您对单词的分布有所了解 - 例如,第一个单词总是长于最后一个单词 - 您可能会使搜索偏斜并获得更快的时间(例如使用向后搜索的strrpos)。< / p>

答案 2 :(得分:0)

如果你有一个更长的字符串,你可以使用基于foreach的解决方案。

这样的事情: -

    $str='nice couple wed today';
    $strA = explode(' ', $str);
    $string = "";
    foreach($strA as $words)
    {
        $string = $string . $words[0];
    }
var_dump($string);

答案 3 :(得分:0)

我不知道你是如何进行剖析的,但你可以尝试一下:

<?php

        $string = "nice couple";
        $pos = strpos($string," ") + 1;
        echo $string[0].$string[$pos];
?>