なんだか簡単に変更できない。
ドキュメントを見てもそれらしい関数が無い?
有用ではないのでメモとして。
#結論
関数作ってみたけど…
- 車輪の再発明感がすごい。
- 一つ一つ手動で入れればいいじゃん。そんなに楽にならないよ。
- そもそも受け手でキーを変更するなら最初から必要な名前にしなさい(サフィックス・プレフィックスはまだ使いドコロがあるかも…)
- 数値添字とか考慮してない
結局ほぼ使わなかったので動作検証とかはないです。
#出来ないこと
foreach ($array as &$key => $value) {
$key .= 'hoge';
}
はキーにリファレンス使えないと怒られる。
array_walk
とかは構造を変更できないらしい。
変更される可能性があるのは配列の値だけであり、 その構造を変更することはできません。つまり、 プログラマは要素の追加や削除そして並べ替えなどができないということです。 コールバック関数がこの条件を満たさない場合は、 この関数の動作は未定義で予期せぬ結果を得ることになります。
#作ったもの
もやもやするけど作る
function array_key_suffix(array $array, $suffix = '')
{
$result = array();
foreach ($array as $key => $value) {
$result[$key . $suffix] = $value;
}
return $result;
}
作るという程のものでもないが。
$result[$suffix . $key]
にすればプレフィックス
関数にしなければ直接$array
に入れていいが、代わりにunset($array[$key])
が必要。
###任意のキーを付けるなら
array_combine
?
でも配列の数と順番が一致しないといけない。
やはり変更前後の表を作って変換するしかないが、存在チェックもしなければいけない
array_key_change(array $map, array $array)
{
$result = array();
foreach($map as $before => $after) {
if(array_key_exists($before, $array)) {
$result[$after] = $array[$before];
}
}
return $result;
}
$before
が無ければ$after
が生まれない。null
を入れておく
function array_key_change(array $map, array $array)
{
$result = array();
foreach($map as $before => $after) {
if(array_key_exists($before, $array)) {
$result[$after] = $array[$before];
} else {
$result[$after] = null;
}
}
return $result;
}
じゃあ三項演算子でいいのか。
function array_key_change(array $map, array $array)
{
$result = array();
foreach($map as $before => $after) {
$result[$after] = array_key_exists($before, $array) ? $array[$before] : null;
}
return $result;
}
キーがないならキーごとのデフォルト値を入れたい場合は…?
function array_key_change(array $map, array $array, array $default)
{
$result = array();
foreach($map as $before => $after) {
$result[$after] = array_key_exists($before, $array) ? $array[$before] : $default[$before];
}
return $result;
}
んーこれだとキーが定義されて値がnull
だとnull
が入るはず。この場合はisset()
のほうがいいのかな…
そもそも期待するキーが無ければ無いままでいいのかもしれない。
あと配列内のキーの付け替え(値交換)にも使えそう。