[PHPメモ]array_mapで[for]

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 出力
//[
//    '西住 みほ',
//    'ダー様',
//    'ケイ',
//    '安斎 千代美',
//    'カチューシャ',
//    '西住 まほ',
//];

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です