php大写和小写没有内置函数

时间:2013-02-27 11:49:15

标签: php uppercase lowercase built-in

嘿伙计们我想将字符串从小写转换为大写,反之亦然而不使用php中的任何内置函数strtoupper或strtolower,任何人都可以帮助我。

编辑:我可以使用其他一些函数来完成这项工作,比如substr(),ord(),chr(),strlen(),str_replace。

这是我在这里的第一个问题,所以无法以最佳方式指明我需要的东西。 我被赋予了在不使用数组的情况下在这些提到的函数中完成工作的任务。

......下次我会小心。

4 个答案:

答案 0 :(得分: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;
}

但这些函数还使用tolower C库中的toupperctype.h! 看看源here

答案 1 :(得分: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);
}

答案 2 :(得分:1)

虽然我无法想象你为什么要这样做;你可以考虑制作一个匹配每个字母的小写和大写的数组。然后对于字符串中的每个字符,在此数组中找到它并返回该值。 (如果你正朝着另一个方向前往钥匙)。

虽然内置函数有开销,但我认为这种方法仍会产生更多开销。

编辑:或者,您可以将每个字符转换为ascii,然后检查范围以查看它是大写还是小写。然后加或减32(dec)以改变另一种情况。

答案 3 :(得分: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;
}

从示例中可以看出大写的等价物。