Converting lowercase_with_underscores to camelCase

I have a case where I'm retrieving an array of associative arrays from a database as shown below:

Array
(
    [0] => Array
        (
            [id] => 1
            [some_id] => 100001
            [some_company_name] => Foo
            [name] => Bar
            [created] => 2008-12-25 21:13:58
            [last_updated] => 2008-12-30 23:32:43
        )

)

...but I need to represent this structure in XML. I have a pre-defined standard in my XML request/response that the element names are to be camel cased.

Aliasing the field names at the query level is just...a hack. So, I needed a way to convert "foo_bar_baz" to "fooBarBaz" before adding the XML element.

To do this, you can use preg_replace_callback() as shown below, which uses a callback function on every match found.

class FooController
{
    public function barAction()
    {
        $dao = new Some_Dao();
        $rows = $dao->getWhateverRows();

        foreach ($rows as $row) {
            foreach ($row as $key => $value) {
                // $key is "foo_bar_baz"
                $key = preg_replace_callback(
                    '/_(\w)/',
                    array($this, '_convertToCamelCase'),
                    $key);

            // $key is now "fooBarBaz"
            }
        }
    }

    private function _convertToCamelCase(array $matches)
    {
         return ucfirst($matches[1]);
    }
}

There is an e modifier that can be used with preg_replace(), but that requires the replacement string to be a valid string of PHP code. This forces the interpreter to parse the replacement string into PHP on each iteration, which can be quite inefficient. Instead, the preg_replace_callback() uses a callback function, which only needs to be parsed once.

I suppose you could easily do the reverse, though I haven't had a need to write that code yet. :) But...there you go! A little end-of-year tip from myself and the preg_replace() examples.