Dieser Artikel stellt hauptsächlich die Erklärung einiger seltsamer Verhaltensweisen der strtr-Funktion in PHP vor. Jetzt kann ich ihn mit Ihnen teilen.
Einige seltsame Verhaltensweisen von strtr Funktion in PHP Erklärung des Verhaltens
Vor ein paar Tagen schickte mir ein Freund einen Artikel zum Lesen, in dem er sagte, dass die strtr-Funktion einige seltsame Verhaltensweisen aufweist
Beim Betrachten des Quellcodes von PHP habe ich Ich habe die folgende Erklärung erhalten:
[Seltsames Verhalten 1]
Werfen wir zunächst einen Blick auf die beiden Zustände dieser PHP-String-Ersetzungsfunktion strtr()
strtr(string,from,to)
oder strtr(string,array )
Zunächst für die erste Methode der strtr-Funktion
Sehen wir uns das folgende Beispiel an:
echo strtr("I Love you","Lo","lO");
Das erhaltene Ergebnis ist
ICH LIEBE DICH
Dieses Ergebnis erinnert uns
1.strtr Es wird zwischen Groß- und Kleinschreibung unterschieden
[Quellcode-Analyse 1]
Die endgültige Implementierungsfunktion der strtr-Funktion ist php_strtr Funktion in Zeile 2670 der Datei string.c Der Quellcode lautet wie folgt:
PHPAPI char *php_strtr(char *str, int len, char *str_from, char *str_to, int trlen){int i;unsigned char xlat[256]; if ((trlen < 1) || (len < 1)) {return str;} for (i = 0; i < 256; xlat[i] = i, i++); for (i = 0; i < trlen; i++) {xlat[(unsigned char) str_from[i]] = str_to[i];} for (i = 0; i < len; i++) {str[i] = xlat[(unsigned char) str[i]];} return str;}
Die gesamte Funktion führt eine Hash-Ersetzung für 256 Zeichen durch. Natürlich enthalten diese 256 Zeichen Groß- und Kleinbuchstaben
[Seltsames Verhalten 2]2.strtr-Ersatz ist etwas ganz Besonderes. Das O in der Mitte ist offensichtlich nicht unsere Absicht Zeichen basieren auf Zeichen, daher ist die Ersetzung ein Zeichen, keine Zeichenfolge [Seltsames Verhalten 3] Geben Sie ein weiteres spezielles Beispiel zur Veranschaulichung dieser PHP-STTR-Funktion. Das seltsame Ergebnis von
echo strtr("I Love you","Love","");
php_strtr(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value), Z_STRVAL_PP(from), Z_STRVAL_PP(to), MIN(Z_STRLEN_PP(from), Z_STRLEN_PP(to)));
if ((trlen < 1) || (len < 1)) {return str;}
echo strtr("I Loves you","Love","lOvEA");
[Quellcode-Analyse drei]
Der Grund ist ähnlich wie beim zweiten MIN(Z_STRLEN_PP(from), Z_STRLEN_PP(to)) nimmt beides von und bis. Die kleinste der Längen von Zeichenfolgenrrree
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Über die Analyse von HashTable im PHP-Quellcode
Über die Analyse von Zend HashTable im PHP-Quellcode
Das obige ist der detaillierte Inhalt vonEine Erklärung einiger seltsamer Verhaltensweisen der strtr-Funktion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!