forの処理を[array_map]でシンプルに記述
簡単な処理なら、コールバック関数を利用してサクッと書けます。
$before = [
'西住 みほ',
'ダージリン',
'ケイ',
'安斎 千代美',
'カチューシャ',
'西住 まほ',
];
$after = array_map(function($name) {
return $name === 'ダージリン'? 'ダー様': $name;
}, $before);
print_r($after);
// $after 出力
//[
// '西住 みほ',
// 'ダー様',
// 'ケイ',
// '安斎 千代美',
// 'カチューシャ',
// '西住 まほ',
//];
使う利点は、変数宣言と加工処理のスコープを分けることで、コードの可読性が上がること。
また、配列の加工処理でindexが処理内容に影響しないことも明示できる。
長期に渡り運用、改修されるプロジェクトでは、コードの可読性が後の改修工数に大きな影響を与える。
可読性を意識することで、後々の改修担当がコードの処理を理解する工数を短縮できる。
但し、[array_map]は速度的に[for]、[foreach]に劣るため、バッチ処理で大量データを加工する場合など、処理速度が優先される場面では避けた方が良い。
なんとなくカッコいいからといって、なんでもかんでも、[array_map]を使えば良いとい言うわけでは無い。
[for]を使って普通に書いた場合はこんな感じ
$before = [
'西住 みほ',
'ダージリン',
'ケイ',
'安斎 千代美',
'カチューシャ',
'西住 まほ',
];
$after = [];
for ($i = 0, $cnt = count($before); $i < $cnt; ++$i) {
$after[] = $before[$i] === 'ダージリン'? 'ダー様': $before[$i];
}
print_r($after);
// $after 出力
//[
// '西住 みほ',
// 'ダー様',
// 'ケイ',
// '安斎 千代美',
// 'カチューシャ',
// '西住 まほ',
//];