Keine Regex oder Rückrufe erforderlich. Fast die gesamte Arbeit kann mit ucwords erledigt werden:
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');
Wenn Sie PHP> = 5.3 verwenden, können Sie lcfirst anstelle von strtolower verwenden.
Aktualisieren
In PHP 5.4.32 / 5.5.16 wurde ucwords ein zweiter Parameter hinzugefügt, was bedeutet, dass wir die Striche nicht zuerst in Leerzeichen ändern müssen (danke an Lars Ebert und PeterM für diesen Hinweis). Hier ist der aktualisierte Code:
function dashesToCamelCase($string, $capitalizeFirstCharacter = false)
{
$str = str_replace('-', '', ucwords($string, '-'));
if (!$capitalizeFirstCharacter) {
$str = lcfirst($str);
}
return $str;
}
echo dashesToCamelCase('this-is-a-string');
if (!$capitalizeFirstCharacter) { $str = lcfirst($str); }
ucwords
tatsächlich ein Trennzeichen als zweiter Parameter akzeptiert wird (siehe Antwort von PeterM ), sodass einer derstr_replace
Aufrufe nicht erforderlich wäre.$str = ! $capitalizeFirstCharacter ? lcfirst($str) : $str;
hauptsächlich aus Gründen der Lesbarkeit (obwohl einige nicht einverstanden sind) und / oder zur Verringerung der Codekomplexität umgeschrieben werden .Dies kann sehr einfach durch Verwendung von ucwords erfolgen, die ein Trennzeichen als Parameter akzeptieren:
Hinweis: Benötigen Sie mindestens php 5.4.32, 5.5.16
quelle
return str_replace($separator, '', lcfirst(ucwords($input, $separator)));
ucwords
hat einen zweiten Parameterdelimiter
,str_replace("_", "", ucwords($input, "_"));
ist also gut genug (in den meisten Fällen: PDies ist meine Variation, wie ich damit umgehen soll. Hier habe ich zwei Funktionen, zuerst verwandelt eine camelCase alles in eine camelCase und es wird nicht durcheinander kommen, wenn die Variable bereits comeCase enthält. Das zweite uncamelCase verwandelt camelCase in einen Unterstrich (großartige Funktion beim Umgang mit Datenbankschlüsseln).
Lassen Sie uns beide testen:
quelle
Überladener Einzeiler mit Dokumentblock ...
quelle
null
return
... aktualisiert, danke. Hier ist ein Link zum Testen dieses 3v4l.org/YBHPdIch würde wahrscheinlich so verwenden
preg_replace_callback()
:quelle
Sie suchen nach preg_replace_callback , Sie können es folgendermaßen verwenden:
quelle
quelle
Ungetesteter Code. Überprüfen Sie die PHP-Dokumente auf die Funktionen im- / explode und ucfirst.
quelle
Ein Liner, PHP> = 5,3:
quelle
Alternativ, wenn Sie es vorziehen, sich nicht mit Regex zu befassen und explizite Schleifen vermeiden möchten :
quelle
Ein weiterer einfacher Ansatz:
quelle
Hier ist eine sehr sehr einfache Lösung in einem Zeilencode
Ausgabe ThisIsAString
quelle
Die TurboCommons-Bibliothek enthält eine allgemeine formatCase () -Methode innerhalb der StringUtils-Klasse, mit der Sie eine Zeichenfolge in viele gängige Groß- und Kleinschreibung konvertieren können, z. B. CamelCase, UpperCamelCase, LowerCamelCase, snake_case, Title Case und viele mehr.
https://github.com/edertone/TurboCommons
Um es zu verwenden, importieren Sie die Phar-Datei in Ihr Projekt und:
Hier ist der Link zum Methodenquellcode:
https://github.com/edertone/TurboCommons/blob/b2e015cf89c8dbe372a5f5515e7d9763f45eba76/TurboCommons-Php/src/main/php/utils/StringUtils.php#L653
quelle
Versuche dies:
Ausgabe:
quelle
In Laravel verwenden
Str::camel()
quelle
Wenn ein anderes Trennzeichen als '-', z. B. '_', ebenfalls übereinstimmen soll, funktioniert dies natürlich nicht. Dann könnte ein preg_replace alle (aufeinanderfolgenden) Trennzeichen zuerst in $ - 'in $ text konvertieren ...
quelle
Diese Funktion ähnelt der Funktion von @ Svens
Aber klarer (ich denke: D) und mit dem optionalen Parameter, um den ersten Buchstaben groß zu schreiben oder nicht.
Verwendung:
quelle
Wenn Sie das Laravel-Framework verwenden, können Sie nur die Methode camel_case () verwenden.
quelle
Hier ist eine weitere Option:
quelle
$stringWithDash = 'Pending-Seller-Confirmation'; $camelize = str_replace('-', '', ucwords($stringWithDash, '-')); echo $camelize;
Ausgabe: PendingSellerConfirmationucwords
Der zweite (optionale) Parameter hilft bei der Identifizierung eines Trennzeichens zum Kamelisieren der Zeichenfolge.str_replace
wird verwendet, um die Ausgabe durch Entfernen des Trennzeichens abzuschließen.quelle
Hier ist eine kleine Hilfsfunktion, die einen funktionalen array_reduce- Ansatz verwendet. Benötigt mindestens PHP 7.0
quelle
Viele gute Lösungen oben, und ich kann einen anderen Weg anbieten, den noch niemand erwähnt hat. In diesem Beispiel wird ein Array verwendet. Ich verwende diese Methode in meinem Projekt Shieldon Firewall .
Probier es aus:
Ergebnis:
quelle
Versuche dies:
quelle
e
Das ist einfacher:
quelle