[英]Getting the first character of a string with $str[0]
我想獲取字符串的第一個字母,我注意到$str[0]
很好用。 我只是不確定這是否是“好的做法”,因為該符號通常用於數組。 這個功能似乎沒有得到很好的記錄,因此我想請大家告訴我在所有方面都可以使用此符號嗎?
還是我應該堅持使用優良的substr($str, 0, 1)
?
另外,我注意到花括號( $str{0}
)也可以工作。 那是怎么回事?
是。 字符串可以看作是字符數組,訪問數組位置的方法是使用[]
運算符。 通常,使用$str[0]
根本沒有問題(而且我敢肯定它比substr()
方法快得多)。
兩種方法都只有一個警告:它們將獲得第一個字節 ,而不是第一個字符 。 如果您使用多字節編碼(例如UTF-8),則這一點很重要。 如果要支持該功能,請使用mb_substr()
。 可以爭論的是,這些天您應該始終假定輸入多字節,因此這是最佳選擇,但速度會稍慢。
{}語法自PHP 5.3.0起已棄用。 建議使用方括號。
假設您只希望$ _POST的一部分中的第一個字符,將其稱為“類型”。 $ _POST ['type']當前為“控件”。 如果在這種情況下,如果您使用$_POST['type'][0]
或substr($_POST['type'], 0, 1)
您將獲得C
但是,如果客戶端要修改發送給您的數據(例如,從type
到type[]
,然后發送“ Control”和“ Test”作為該數組的數據,則$_POST['type'][0]
現在將返回Control
而不是C
而substr($_POST['type'], 0, 1)
只會失敗。
因此,是的,使用$str[0]
可能會出現問題,但這取決於周圍的情況。
我唯一的疑問是該技術在多字節字符串上的適用性,但是如果不考慮這一點,那么我懷疑您已被覆蓋。 (如果有疑問, mb_substr()
似乎是一個安全的選擇。)
但是,從全局角度來看,我想知道您需要多長時間訪問一次字符串中的第n個字符才能將此作為關鍵考慮因素。
它會因資源而異,但是您可以在下面運行腳本並親自查看;)
<?php
$tests = 100000;
for ($i = 0; $i < $tests; $i++)
{
$string = md5(rand());
$position = rand(0, 31);
$start1 = microtime(true);
$char1 = $string[$position];
$end1 = microtime(true);
$time1[$i] = $end1 - $start1;
$start2 = microtime(true);
$char2 = substr($string, $position, 1);
$end2 = microtime(true);
$time2[$i] = $end2 - $start2;
$start3 = microtime(true);
$char3 = $string{$position};
$end3 = microtime(true);
$time3[$i] = $end3 - $start3;
}
$avg1 = array_sum($time1) / $tests;
echo 'the average float microtime using "array[]" is '. $avg1 . PHP_EOL;
$avg2 = array_sum($time2) / $tests;
echo 'the average float microtime using "substr()" is '. $avg2 . PHP_EOL;
$avg3 = array_sum($time3) / $tests;
echo 'the average float microtime using "array{}" is '. $avg3 . PHP_EOL;
?>
一些參考數字(在舊的CoreDuo機器上)
$ php 1.php
the average float microtime using "array[]" is 1.914701461792E-6
the average float microtime using "substr()" is 2.2536706924438E-6
the average float microtime using "array{}" is 1.821768283844E-6
$ php 1.php
the average float microtime using "array[]" is 1.7251944541931E-6
the average float microtime using "substr()" is 2.0931363105774E-6
the average float microtime using "array{}" is 1.7225742340088E-6
$ php 1.php
the average float microtime using "array[]" is 1.7293763160706E-6
the average float microtime using "substr()" is 2.1037721633911E-6
the average float microtime using "array{}" is 1.7249774932861E-6
似乎使用[]
或{}
運算符大致相同。
簡而言之,我會堅持使用$str[0]
。 就我而言,一目了然地掌握$str[0]
的含義要比substr($str, 0, 1)
更快。 這可能歸結為偏好問題。
就性能而言,概要概要文件概要文件。 :)或者您可以查看PHP源代碼...
$str = 'abcdef';
echo $str[0]; // a
如果使用多字節(unicode)字符串,則使用str[0]
可能會造成麻煩。 mb_substr()
是更好的解決方案。 例如:
$first_char = mb_substr($title, 0, 1);
這里有一些細節: 獲取UTF-8字符串的第一個字符
我以前也使用過這種表示法,沒有不良的副作用,也沒有誤解。 這是有道理的-畢竟,字符串只是字符數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.