第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

php字符串串聯(lián),性能

php字符串串聯(lián),性能

PHP
翻翻過去那場雪 2019-11-30 14:22:52
在Java和C#之類的語言中,字符串是不可變的,并且一次建立一個字符的字符串在計算上是昂貴的。在上述語言中,有一些庫類可以降低這種成本,例如C#System.Text.StringBuilder和Java java.lang.StringBuilder。php(4或5;我對兩者都感興趣)是否都共享此限制?如果是這樣,是否有類似的解決方案?
查看完整描述

3 回答

?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗 獲得超6個贊

不,在PHP中沒有stringbuilder類的類型,因為字符串是可變的。


話雖如此,根據(jù)您在做什么,有不同的方式來構(gòu)建字符串。


例如,echo將接受逗號分隔的標(biāo)記以進(jìn)行輸出。


// This...

echo 'one', 'two';


// Is the same as this

echo 'one';

echo 'two';

這意味著您無需實際使用連接就可以輸出復(fù)雜的字符串,這會比較慢


// This...

echo 'one', 'two';


// Is faster than this...

echo 'one' . 'two';

如果需要在變量中捕獲此輸出,則可以使用輸出緩沖功能來完成。


另外,PHP的數(shù)組性能非常好。如果要執(zhí)行逗號分隔的值列表之類的操作,請使用implode()


$values = array( 'one', 'two', 'three' );

$valueList = implode( ', ', $values );

最后,請確保您熟悉PHP的字符串類型,它的不同定界符以及每個定界符的含義。


查看完整回答
反對 回復(fù) 2019-11-30
?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗 獲得超9個贊

PHP中不需要StringBuilder模擬。


我做了幾個簡單的測試:


在PHP中:


$iterations = 10000;

$stringToAppend = 'TESTSTR';

$timer = new Timer(); // based on microtime()

$s = '';

for($i = 0; $i < $iterations; $i++)

{

    $s .= ($i . $stringToAppend);

}

$timer->VarDumpCurrentTimerValue();


$timer->Restart();


// Used purlogic's implementation.

// I tried other implementations, but they are not faster

$sb = new StringBuilder(); 


for($i = 0; $i < $iterations; $i++)

{

    $sb->append($i);

    $sb->append($stringToAppend);

}

$ss = $sb->toString();

$timer->VarDumpCurrentTimerValue();

在C#(.NET 4.0)中:


const int iterations = 10000;

const string stringToAppend = "TESTSTR";

string s = "";

var timer = new Timer(); // based on StopWatch


for(int i = 0; i < iterations; i++)

{

    s += (i + stringToAppend);

}


timer.ShowCurrentTimerValue();


timer.Restart();


var sb = new StringBuilder();


for(int i = 0; i < iterations; i++)

{

    sb.Append(i);

    sb.Append(stringToAppend);

}


string ss = sb.ToString();


timer.ShowCurrentTimerValue();

結(jié)果:


10000次迭代:

1)PHP,普通串聯(lián):?6ms

2)PHP,使用StringBuilder:

?5 ms 3)C#,普通串聯(lián):?520ms

4)C#,使用StringBuilder:?1ms


100000次迭代:

1)PHP,普通串聯(lián):?63ms

2)PHP,使用StringBuilder:?555ms

3)C#,普通串聯(lián):?91000ms // !!!

4)C#,使用StringBuilder:?17ms


查看完整回答
反對 回復(fù) 2019-11-30
  • 3 回答
  • 0 關(guān)注
  • 429 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號