2010-02-03 21 views
11

Chcę wykorzystać każde słowo i połączyć je w 1 słowo, np:Czy można to zrobić szybciej?

główna = Home
o-nas = AboutUs

Oto funkcja używam w tej chwili, może regex czy to lepiej czy bardziej wydajnie?

public function formatClassName($name) 
{ 
$name = str_replace('-', ' ', $name); 
$name = ucwords($name); 
$name = str_replace(' ', '', $name); 
return $name; 
} 

Odpowiedz

29

Nie sądzę regex mogą wykorzystać te słowa, więc chcesz nadal mieć dwa oddzielne regexes, i myślę, że z takich prostych przypadkach, wyrażenia regularne są przesadą (myślę polowania na wiewiórki z artylerii) . Ten kod jest prosty, przejrzysty i łatwy do zrozumienia. NIE DOTYKAJ GO!

+3

RegEx może zamienić pierwszą literę, ale twoja rada jest martwa, KISS. – TravisO

+9

Oczywiście, nigdy nie polowałeś na wiewiórki z artylerią;) –

+0

Możesz wpisać słowo z 'preg', ponieważ możesz przekazać flagę'/e' i umieścić kod PHP jako "zamiennik". – kennytm

12

Z regex, to prawdopodobnie masz użyć czegoś „kompleks”, jak preg_replace_callback(aby móc zastosować strtoupper lub ucwords funkcji), która stałaby kod przynajmniej trudniejsze do zrozumienia - i ewentualnie wolniej, ale najważniejsze jest to, że twój kod jest łatwy do zrozumienia.

Biorąc pod uwagę twoje rozwiązanie po prostu działa i jest proste i łatwe., Prawdopodobnie zachowałbym go, gdybym był na twoim miejscu.

4

Ten kod działa:

$in = Array("home", "about-us"); 
foreach ($in as $a) { 

    ## this is the line you're looking for 
    $out = preg_replace('/-?\b(.)/e', "strtoupper('$1')", $a); 

    echo "$a = $out<br/>"; 
} 

Ale wątpię, że to szybciej, i zgadzam się z innych komentujących, że to nie koniecznie lepiej. Zmniejszenie trzech linii do jednego włochatego wyrażenia regularnego jest dobre tylko wtedy, gdy jesteś golfing.

Powiązane problemy