2013-02-27 106 views
-3

嘿傢伙我想轉換字符串從小寫到大寫,反之亦然,沒有使用任何內置函數strtoupper或strtolower在PHP中,任何人都可以幫助我。我可以使用一些其他函數來完成這個工作,比如substr(),ord(),chr(),strlen(),str_replace。php大小寫沒有內置函數

這是我的第一個問題,所以無法以最佳方式指定我所需要的。 我被賦予了在不使用數組的情況下在這些提到的函數中完成這項工作的任務。

...下次我會小心的。

+9

你能解釋爲什麼你不想使用內置函數嗎? – 2013-02-27 11:49:44

+0

簡單的ASCII,特定的代碼頁/字符集或UTF-8? – 2013-02-27 11:50:26

+0

使用PHP隱式意味着使用它的功能! – jtheman 2013-02-27 11:51:05

回答

2
function myStrToLower($string) { 
    $from = range('A','Z'); 
    $to = range('a','z'); 
    return str_replace($from, $to, $string); 
} 

function myStrToUpper($string) { 
    $from = range('a','z'); 
    $to = range('A','Z'); 
    return str_replace($from, $to, $string); 
} 
+3

'range'和'str_replace'是內置函數...編輯:好的,OP編輯他的問題 – Passerby 2013-02-27 11:56:44

1

雖然我無法想象你爲什麼要這樣做,你可以考慮製作一個匹配每個字母的小寫字母和大寫字母的數組。然後對於字符串中的每個字符,在該數組中找到並返回值。 (或者如果你走向另一個方向則是鑰匙)。

雖然內置函數有開銷,但我認爲這種方法仍會產生更多開銷。

編輯:或者,您可以將每個字符轉換爲ascii,然後檢查範圍以查看它是大寫還是小寫。然後加上或減去32(十)去改變另一種情況。

0

一種可能的實現(如果你允許str_split)將是:

function myToLowerCase($str) 
{ 
    static $charMap = array(
     'A' => 'a', 'B' => 'b', 'C' => 'c', 'D' => 'd', 'E' => 'e', 'F' => 'f', 
     'G' => 'g', 'H' => 'h', 'I' => 'i', 'J' => 'j', 'K' => 'k', 'L' => 'l', 
     'M' => 'm', 'N' => 'n', 'O' => 'o', 'P' => 'p', 'Q' => 'q', 'R' => 'r', 
     'S' => 's', 'T' => 't', 'U' => 'u', 'V' => 'v', 'W' => 'w', 'X' => 'x', 
     'Y' => 'y', 'Z' => 'z', 
    ); 
    $chars = str_split($str); 
    $result = ''; 

    for ($i = 0; $i < count($chars); $i++) 
    { 
     if (isset($charMap[$chars[$i]])) 
     { 
      $result .= $charMap[$chars[$i]]; 
     } 
     else 
     { 
      $result .= $chars[$i]; 
     } 
    } 

    return $result; 
} 

大寫形式應該是從看例子明顯。

3

C函數的樣子:

PHPAPI char *php_strtoupper(char *s, size_t len) 
{ 
    unsigned char *c, *e; 

    c = (unsigned char *)s; 
    e = (unsigned char *)c+len; 

    while (c < e) { 
     *c = toupper(*c); 
     c++; 
    } 
    return s; 
} 

PHPAPI char *php_strtolower(char *s, size_t len) 
{ 
    unsigned char *c, *e; 

    c = (unsigned char *)s; 
    e = c+len; 

    while (c < e) { 
     *c = tolower(*c); 
     c++; 
    } 
    return s; 
} 

而且這些功能使用tolowertoupperctype.h C庫! 看看原因here