Stringumwandlung Underscore/CamelCase

Häufig ist beim Umgang mit Datenquellen eine Stringumwandlung zwischen der Underscore- und CamelCase-Schreibweise erforderlich. Wo das sinnvoll ist und wie man es einfach anwendet, ist das Thema des heutigen Artikels.

Die Underscore-Schreibart (z.B. “user_id”) findet man sehr oft als Spaltenbezeichner in Datenbanken oder auch in XML-Dateien, im PHP-Model (siehe auch mein Artikel zum Custom_Model) hingegen wird oft CamelCase (z.B. “userId”) verwendet.

Es wird also an der Schnittstelle zwischen dem Model und der Datenquelle eine Art Key-Mapping benötigt. Das lässt sich zwar recht einfach mit regulären Ausdrücken erschlagen, aber man kann sich auch der Zend_Filter-Klassen bedienen, wenn man in einem ZF-Umfeld arbeitet.

Die Anwendung ist wie so vieles beim Zend Framework recht einfach:

<?php
$toCamelCaseFilter = new Zend_Filter_Word_UnderscoreToCamelCase();
echo $toCamelCaseFilter->filter('user_id');

// Ausgabe: UserId

Umgekehrt, wen wird es wundern, ist das natürlich genauso leicht:

<?php
$toUnderscoreFilter = new Zend_Filter_Word_CamelCaseToUnderscore();
echo $toUnderscoreFilter->filter('UserId');

// Ausgabe: User_Id

Wenn man nicht extra eine Instanz erzeugen will, dann lassen sich die Zend Filter auch mit einem statischen Aufruf nutzen.

<?php
echo Zend_Filter::filterStatic('bitte_einmal_camel_case',
                               'Word_UnderscoreToCamelCase');

// Ausgabe: BitteEinmalCamelCase

Das war es dann auch schon wieder für heute. Ich hoffe, dass euch der Artikel gefallen hat und ihr viele kreative Ideen zum Arbeiten mit den Filtern habt.

2 Kommentare

  1. Wird UserId wirklich zu User_id? D.h. man müsste es noch mal durch strtolowercase() jagen, damit das gleiche Ergebnis wie darüber, nur rückwärts rauskommt.

  2. Das Ergebnis müsste tatsächlich nochmal durch strtolower() geschickt werden. Ist mir beim Testen auch aufgefallen.

Schlagwörter: Adapter, Amazon, Animation, Annotations, Anonyme Klasse, Ant, Apache, API, Array, ArrayAccess, Attachment, AutoLoader, Bedienung, Bedingung, Benchmark, Bildbearbeitung, BOM, Bootstrap, Bot, Byte Order Mark, Callback, CamelCase, Canvas, Captcha, Cheatsheet, CLI, Closure, Cloud, CodeSniffer, Community, Comparator, Contest, Controller, Converter, CouchDB, Countable, Cronjob, CSV, CustomLibrary, Custom_Model, Data Mapper, Datei, Datenbank, Datenstruktur, Datentypen, Dating, Decorator, Dekorierer, Design Patterns, Dump, Duplikat, each, Eclipse, Entwicklung, Entwurfsmuster, Enum, Erweiterung, Eventhandling, Exception-Handling, Extension, Factory, Fehler, Flash, Foreach, Formatierung, Formular, Funktion, Futon, Header, HTML5, HTTP, IDE, If, Implementierung, InnoDB, Interceptor, Interface, isset, Iterator, Java, JavaScript, jQuery, Konfiguration, Konsole, Kontrollstruktur, kopieren, Late Static Binding, Layout, Linux, Listeners, Logging, Löschen, Magento, Magic Methods, Marketing, Methode, Model, MVC, MySQL, NetBeans, Objekt, Observable, Observer, OOP, Operator, Parameter, Partnersuche, Performance, PHP, phpMyAdmin, PHPUnit, Plugin, Proxy, Qualitätssicherung, Query, Reflection, Request, Response, Rest-API, Rockstar, Routing, S3, Samba, Scheifen, Schleife, Schutz, Secure Shell, Selbstreferenz, Shop, Sicherheit, Sicherung, Singleton Pattern, SOAP, Sortierung, Sourcecode, Spam, Speicherproblem, Spickzettel, SPL, SSH, Statement, Stellvertreter, Strategy Pattern, Stream, String, Sun VirtualBox, Support, Switch, Symfony, Symfony2, Symfony Live, Tag, Template, Template Method, Ternär Operator, Testing, Thumbnail, Tool, Tour, Twig, Type-Cast, Umwandlung, Underscore, unset, Vererbung, Verzweigung, Video, Videospiel, Virtualisierung, Visitor Pattern, Vorschaubild, walk, Webserver, Webservice, Weiterleitung, Wrapper, Youtube, Zeitsteuerung, Zend Framework, Zend_Cloud, Zend_CodeGenerator, Zend_Http_Client, Zend_Service, Zugriffsmethode