配列のkeyをスネークケースからキャメルケースに変換する処理
function camelizeArrayRecursive(array $array)
{
$results = [];
foreach ($array as $key => $value) {
if (is_array($value)) {
$results[Illuminate\Support\Str::camel($key)] = camelizeArrayRecursive($value);
} else {
$results[Illuminate\Support\Str::camel($key)] = $value;
}
}
return $results;
}
※ 依存モジュールがあります。composerとかで、Illuminate\Supportのモジュールをインストールしてください。Laravel使っている方は、デフォで入ってます。
使うとこんな感じ
$array = [
'id' => 1,
'name' => 'name1',
'zip_code' => '111-0001',
'comments' => [
[
'blog_id' => 1,
'comment' => 'comment11',
'zip_code' => '111-0011',
],
[
'blog_id' => 1,
'comment' => 'comment12',
'zip_code' => '111-0012',
],
],
];
$_array = camelizeArrayRecursive($array);
=> [
"id" => 1,
"name" => "name1",
"zipCode" => "111-0001",
"comments" => [
[
"blogId" => 1,
"comment" => "comment11",
"zipCode" => "111-0011",
],
[
"blogId" => 1,
"comment" => "comment12",
"zipCode" => "111-0012",
],
],
]
あとがき
Eloquent ORMいじっていた時に、テーブルのカラム名がスネークケースからキャメルケースに変えられないので、変える処理を書いてみた。
基本的にORMが嫌いなのですが、Eloquent ORM良いよと言われて、調べてた時の副産物です。
(触ってもいないのにディスれない的な)(Eloquent ORMの話は別記事で)
PHPの標準関数「array_walk_recursive」もkeyを変える場合は使えないし、Eloquent ORMも、スネークからキャメルに変える需要はありそうなのに提供してないしで、えいやっと書きました。性能面を考えると参照渡ししたほうがよさそうですが、バグが無いほうが良いかなぁと、とりあえずやってないです。(使うときは、処理速度測ったり、テスト書いて使わないとですね。)