PHPで配列の要素全てに関数を一気に適用する方法!
今更なのですが、配列の要素全てに一気に関数を適用する方法をメモしておきます。
実はこれまでこういったことをやる場合にforeach(){}でループさせていました。
ですが、もっと簡単にできました。。。知らなかった・・・
はい。array_map()です。
array array_map ( callable $callback , array $arr1 [, array $... ] )
使用例は、こんな感じ。
<?php function cube($n){ return($n * $n * $n); } $a = array(1, 2, 3, 4, 5); $b = array_map("cube", $a); print_r($b); ?>
print_r()の結果はこんな感じ。
Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 )
関数名を第一引数に文字列で渡すところが不思議な感じがしますが。
ちなみにfunctionに指定する引数には配列の各要素が代入されて処理されることになります。
配列は第二引数に指定してありますが、第三引数、第四引数・・・と配列を増やした場合、functionの引数の数を増やせばそれぞれに配列の要素が代入されて処理できます。
例えばこんな感じ。
<?php function show_Spanish($n, $m){ return("The number $n is called $m in Spanish"); } function map_Spanish($n, $m){ return(array($n => $m)); } $a = array(1, 2, 3, 4, 5); $b = array("uno", "dos", "tres", "cuatro", "cinco"); $c = array_map("show_Spanish", $a, $b); print_r($c); $d = array_map("map_Spanish", $a , $b); print_r($d); ?>
実行結果はこんな感じです。
// printout of $c Array ( [0] => The number 1 is called uno in Spanish [1] => The number 2 is called dos in Spanish [2] => The number 3 is called tres in Spanish [3] => The number 4 is called cuatro in Spanish [4] => The number 5 is called cinco in Spanish ) // printout of $d Array ( [0] => Array ( [1] => uno ) [1] => Array ( [2] => dos ) [2] => Array ( [3] => tres ) [3] => Array ( [4] => cuatro ) [4] => Array ( [5] => cinco ) )