簡體   English   中英

使用$ str [0]獲取字符串的第一個字符

[英]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

但是,如果客戶端要修改發送給您的數據(例如,從typetype[] ,然后發送“ Control”和“ Test”作為該數組的數據,則$_POST['type'][0]現在將返回Control而不是Csubstr($_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM