如果我有一组两个单词(以空格分隔),例如:
$str='nice couple';
从每个单词中获取第一个字母的最快(用于服务器处理)方法是什么? IE浏览器。最终结果应该是:
NC
我知道我可以拿$ str [0]并且获得第一个字符(' n)是最快的,但是如何获得第二个字符(' c')一个快速的方式,以便我进入最后' nc'
答案 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];
?>