是 // Trlen は、文字列 str_from と str_to の長さの最小値です。 // ;たとえば、from="ab",to="cd" とすると、'a'=>c'、'b'=>'d' という対応関係が生成されます。
for (i = 0; i < trlen; i++) {
xlat[(unsigned char) str_from[i]] = str_to[i];
}
}
なぜなら、置換する必要がある文字がこの場合、(i = 0; i < len; i++) {
のような演算を最初に判断してから値を割り当てる方が効率的です。 strtr('abcdaaabcd', 'ab', 'efd') は非常に効率的であるはずです。
(注: この操作では ecdeeefcd が出力されます)
php_strtr_array をもう一度見てください:
コードをコピーします
コードは次のとおりです:
static void php_strtr_array(zval *return_value, char *str, int slen, HashTable *hash)
{
zval **entry; **trans;
zval ctmp;
ulong num_key;
int minlen = 128*1 024;
int maxlen = 0, pos, len, found; HashTable tmp_hash;
//置換配列を tmp_hash にコピーし、添字文字列の最大長と最小長を記録します。 use using ‐ の tmp tmp t-n tmp tmp_hash hash, (void **) & Entry, & HPOS) == 成功) {
Switch (Zend_hash_get_current_key_ex (Hash, & String_key, & String_LEN, & Num_key) {
CAS) e have_key_is_string:
len = string_key_len-1 ;
if (len & lt; 1) {
e (&tmp_hash);
zend_hash_add(&tmp_hash、string_key、string_key_len、entry、sizeof(zval*)); maxlen = len) {
case hash_key_is_long:z_type(ctmp)= is_long; }
found = 0; >'f')、最初に a を e に置き換えるのではなく、最初に ab を f に置き換えます。and(zend_hash_find(&tmp_hash、key、len+1)==成功){zval tmp;
if(z_type_pp(trans)!= is_String){
strue
}
);
zend_hash_destroy(&tmp_hash);
http://www.bkjia.com/PHPjc/327900.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/327900.html
技術記事
最近、文字列の一致と置換が必要になることが多いです。以前は str_replace または preg_replace を使用することが多かったです。strtr が効率的だと言われているので、以下のようにコードをコピーします。