PHP CamelCase için Tire dönüştürmek

6 Cevap php

Birisi bana bu PHP işlevini tamamlamak yardımcı olabilir? Ben böyle bir dize almak istiyorum: 'Bu-bir-string' ve bu dönüştürmek: 'thisIsAString':

function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
    // Do stuff


    return $string;
}

6 Cevap

Hiçbir ifadenin veya gerekli callbacks. Hemen hemen tüm iş ucwords ile yapılabilir:

function dashesToCamelCase($string, $capitalizeFirstCharacter = false) 
{

    $str = str_replace(' ', '', ucwords(str_replace('-', ' ', $string)));

    if (!$capitalizeFirstCharacter) {
        $str[0] = strtolower($str[0]);
    }

    return $str;
}

echo dashesToCamelCase('this-is-a-string');

PHP> = 5.3 kullanıyorsanız, yerine strtolower arasında lcfirst kullanabilirsiniz.

$string = explode( "-", $string );
$first = true;
foreach( $string as &$v ) {
    if( $first ) {
        $first = false;
        continue;
    }
    $v = ucfirst( $v );
}
return implode( "", $string );

Denenmemiş kodu. Ucfirst fonksiyonları im-/explode ve için PHP dokümanlar kontrol edin.

Bu deneyin:

 return preg_replace("/\-(.)/e", "strtoupper('\\1')", $string);

Bu onunla nasıl başa benim çeşididir. Burada iki işlev, ilk tane değişken zaten cameCase içeriyorsa camelCase bir CamelCase içine bir şey dönüşür ve alışkanlık karışıklık var. (Veritabanı anahtarları ile uğraşırken büyük özelliği) İkinci uncamelCase çizgi haline camelCase dönüşür.

function camelCase($str) {
    $i = array("-","_");
    $str = preg_replace('/([a-z])([A-Z])/', "\\1 \\2", $str);
    $str = preg_replace('@[^a-zA-Z0-9\-_ ]+@', '', $str);
    $str = str_replace($i, ' ', $str);
    $str = str_replace(' ', '', ucwords(strtolower($str)));
    $str = strtolower(substr($str,0,1)).substr($str,1);
    return $str;
}
function uncamelCase($str) {
    $str = preg_replace('/([a-z])([A-Z])/', "\\1_\\2", $str);
    $str = strtolower($str);
    return $str;
}

testi sağlar hem de:

$camel = camelCase("James_LIKES-camelCase");
$uncamel = uncamelCase($camel);
echo $camel." ".$uncamel;

Bu basittir:

$string = preg_replace( '/-(.?)/e',"strtoupper('$1')", strtolower( $string ) );