PHPで配列の全要素を効率的に処理する方法 array_walk()とarray_map()

この記事では、PHPで配列の全要素を効率的に処理するためのarray_walk()とarray_map()の使い方を解説します。

PHPで配列の全要素を一括で処理する方法を知りたいんですが、どうすればいいですか?

PHPにはarray_walk()とarray_map()という便利な関数があります。array_walk()は配列の各要素に対して関数を実行し、array_map()は各要素を変換した新しい配列を返します。

目次

受講者数No.1!初心者からプロへ導く信頼のスクール

    短期間で習得可能!未経験から実践力を磨く充実のプログラム

    今なら無料相談でAmazonギフトカードがもらえる!

    array_walk()の使い方: 各要素への反復処理

    array_walk()は、配列の各要素に対して指定した関数を実行するための関数です。以下の例で、その使用方法を見てみましょう。

    $fruits = ['apple', 'banana', 'orange'];
    
    function printItem($item) {
        echo '**アイテム**: ' . $item . PHP_EOL;
    }
    
    array_walk($fruits, 'printItem');
    

    このプログラムは、配列$fruitsの各要素を反復し、printItem関数を通じて出力します。

    array_walk()の使い方: 各要素への反復処理

    **array_walk()**は、配列の各要素に対して指定した関数を一つずつ適用するためのPHPの関数です。この関数は、配列の要素に対して特定の処理を行いたい場合に非常に便利です。

    基本構文

    array_walk(配列, 関数名, [オプションの引数]);

    • 配列: 処理を行いたい配列を指定します。
    • 関数名: 各要素に適用したい関数を指定します。
    • オプションの引数: 必要に応じて関数に追加で渡すことができる引数です。

    サンプルプログラム

    次に、array_walk()を使って、配列の各要素に処理を行う例を見てみましょう。

    $fruits = ['apple', 'banana', 'orange'];
    
    function printItem($item, $key) {
        echo 'キー: ' . $key . ' - **アイテム**: ' . $item . PHP_EOL;
    }
    
    array_walk($fruits, 'printItem');
    

    このプログラムでは、$fruitsという配列の各要素にprintItem関数が適用されます。printItem関数は、配列の各要素とそのキーを受け取り、それらを出力します。

    オプション引数の使用

    array_walk()では、追加の引数を渡すことも可能です。以下の例では、オプション引数を使って、各要素に接頭辞を追加しています。

    $fruits = ['apple', 'banana', 'orange'];
    
    function addPrefix($item, $key, $prefix) {
        echo 'キー: ' . $key . ' - アイテム: ' . $prefix . $item . PHP_EOL;
    }
    
    $prefix = 'フルーツ: ';
    array_walk($fruits, 'addPrefix', $prefix);
    

    この例では、$prefixaddPrefix関数に追加の引数として渡され、各要素に「フルーツ: 」という接頭辞が追加されて出力されます。

    array_map()の使い方: 配列の各要素を変換する方法

    array_map()は、配列の各要素に対して指定した関数を適用し、その結果を新しい配列として返すPHPの関数です。この関数は、元の配列を変更せずに、変換された新しい配列を生成する際に非常に役立ちます。

    基本構文

    array_map(関数名, 配列1, 配列2, …);

    • 関数名: 各要素に適用したい関数を指定します。
    • 配列1, 配列2, …: 処理対象の1つ以上の配列を指定します。複数の配列を指定すると、それぞれの配列の対応する要素が関数に渡されます。

    サンプルプログラム

    次に、array_map()を使って、配列の各要素を変換する例を見てみましょう。

    $numbers = [1, 2, 3, 4];
    
    function square($number) {
        return '**平方**: ' . ($number * $number);
    }
    
    $squaredNumbers = **array_map('square', $numbers);**
    print_r($squaredNumbers);
    

    このプログラムでは、$numbersという配列の各要素がsquare関数に渡され、各数値が平方されます。その結果、新しい配列$squaredNumbersには、各要素の平方が格納されます。

    複数の配列に対する操作

    array_map()では、複数の配列を同時に処理することも可能です。以下の例では、2つの配列を使って、それぞれの要素を加算します。

    $numbers1 = [1, 2, 3];
    $numbers2 = [4, 5, 6];
    
    function add($a, $b) {
        return '**合計**: ' . ($a + $b);
    }
    
    $sumNumbers = **array_map('add', $numbers1, $numbers2);**
    print_r($sumNumbers);
    

    この例では、$numbers1$numbers2の各要素がadd関数に渡され、各ペアの要素が加算されて新しい配列$sumNumbersが生成されます。

    array_walk()とarray_map()の違い: 表で比較

    **array_walk()array_map()**はどちらもPHPで配列を処理するための便利な関数ですが、それぞれの目的と挙動には明確な違いがあります。以下の表で、これらの関数の違いを比較してみましょう。

    特徴/機能array_walk()array_map()
    目的配列の各要素に対して関数を適用し、元の配列を直接操作配列の各要素に対して関数を適用し、新しい配列を返す
    返り値なし(元の配列が直接変更される)新しい配列(元の配列は変更されない)
    適用範囲1つの配列複数の配列にも対応
    処理結果の保存元の配列に結果が反映される処理結果を新しい配列として返す
    ネストした配列への対応**array_walk_recursive()**を使用する必要がある**array_map()**はネストした配列には対応しない
    コールバック関数の引数配列のキーと値が渡される複数の配列の対応する要素がそれぞれ渡される
    実行時の副作用副作用あり(元の配列が変更される)副作用なし(新しい配列が生成されるため)

    具体的な違い

    • array_walk()は、元の配列に直接作用するため、配列の要素を上書きしたり、操作したりする場合に適しています。例えば、配列の各要素を出力する場合や、要素を加工する場合に便利です。
    • array_map()は、元の配列を変更せずに、新しい配列を作成するために使用します。例えば、元の配列を基に新しい値を生成する場合や、複数の配列の要素を組み合わせる場合に便利です。

    まとめ

    • array_walk()は、配列の各要素に対して関数を適用し、元の配列を直接変更する関数です。
    • array_map()は、配列の各要素に関数を適用し、その結果を新しい配列として返します。元の配列は変更されません。
    • array_walk()は、配列に対して直接処理を行いたい場合に有効で、特に副作用が許容されるケースで便利です。
    • array_map()は、元の配列を変更せずに、変換された新しい配列が必要な場合に適しています。
    • array_walk()は1つの配列に対して処理を行いますが、array_map()は複数の配列に対して同時に処理を行うことができます。

    今回、array_walk()とarray_map()について詳しく説明しました。これらの関数を適切に使い分けることで、PHPでの配列操作がさらに効率的になります。ぜひ実際のコードで活用してみてください。

    また、array_walk_recursive()という関数もあり、これはネストされた配列にも対応しています。多次元配列を扱う際には、この関数を検討してみると良いでしょう。

    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!
    目次