Code:
$result = array_map(関数, 配列[, 配列 ...]);
配列内の要素に対し、まとめて処理を行います。
行う処理は、PHP標準関数、定義済関数、無名関数、クラス関数など、様々な形の関数で指定することが出来ます。
色々な関数を渡した場合の使いどころとサンプルを紹介していきます。
行う処理は、PHP標準関数、定義済関数、無名関数、クラス関数など、様々な形の関数で指定することが出来ます。
色々な関数を渡した場合の使いどころとサンプルを紹介していきます。
使えるサンプル
配列内の文字列をまとめて小文字に
Code:
$array = [
'ABC',
'DEF',
'GHI',
];
$result = array_map('strtolower', $array);
Result:
array(3) {
[0]=>
string(3) "abc"
[1]=>
string(3) "def"
[2]=>
string(3) "ghi"
}
PHPの標準関数strtolowerを指定して、文字列内の「大文字アルファベット」を「小文字アルファベット」に変換して返します。
trim関数で前後のスペースなどを削除
Code:
$array = [
' 半角スペース ',
' タブ ',
'
改行
',
];
$result = array_map('trim', $array);
Result:
array(4) {
[0]=>
string(18) "半角スペース"
[1]=>
string(6) "タブ"
[2]=>
string(6) "改行"
}
PHPの標準関数trimを指定して、先頭および末尾にある「スペース」 「タブ」 「リターン」 「改行」 「NULバイト」 「垂直タブ」を削除します。
trimでは消しきれない全角スペースも削除
Code:
$array = [
' 半角スペース ',
' 全角スペース ',
' タブ ',
'
改行
',
];
$result = array_map(function($value) {
return preg_replace('/\A[\r?\n\x00\s\t]+|[\r?\n\x00\s\t]+\z/su', '', $value);
}, $array);
Result:
array(5) {
[0]=>
string(18) "半角スペース"
[1]=>
string(18) "全角スペース"
[2]=>
string(6) "タブ"
[3]=>
string(6) "改行"
[4]=>
string(6) "全部"
}
PHPの標準関数trimでは削除出来ない「全角スペース」も削除したい場合は、自作の関数を作成し削除します。
電話番号(携帯)にハイフンを入れて見やすく
Code:
$array = [
'09000000001',
'09000000002',
'09000000003',
];
$result = array_map(function($value) {
return preg_replace('/\A(\d{3})(\d{4})(\d{4})\z/', '$1-$2-$3', $value);
}, $array);
Result:
array(3) {
[0]=>
string(13) "090-0000-0001"
[1]=>
string(13) "090-0000-0002"
[2]=>
string(13) "090-0000-0003"
}
正規表現を用いて、電話番号(携帯)を「\d{3}-\d{4}-\d{4}」のハイフン区切りにします。
携帯以外の番号も同時に区切りたい場合は、「桁数」 「最初の3文字」などで分岐し、区切る必要があります。
携帯以外の番号も同時に区切りたい場合は、「桁数」 「最初の3文字」などで分岐し、区切る必要があります。
住所の自由入力などで発揮される個性、類似ハイフンをまとめて統一
Code:
$array = [
'--﹣−‐⁃‑‒–—﹘―⎯',
'⏤₋ーー─━╴╶╸╺一⼀㆒',
];
$hyphens = ['\x{FF0D}', '\x{FE63}', '\x{2212}', '\x{2010}', '\x{2043}', '\x{2011}', '\x{2012}', '\x{2013}', '\x{2014}', '\x{fe58}', '\x{2015}', '\x{23AF}', '\x{23E4}', '\x{208B}', '\x{30FC}', '\x{FF70}', '\x{203E}', '\x{2CD}', '\x{2500}', '\x{2501}', '\x{2574}', '\x{2576}', '\x{2578}', '\x{257A}', '\x{4E00}', '\x{2F00}', '\x{3192}',];
$result = array_map(function($value) use($hyphens) {
return preg_replace(
'/['.implode('|', $hyphens).']/u',
'-',
$value);
}, $array);
Result:
array(2) {
[0]=>
string(13) "-------------"
[1]=>
string(13) "-------------"
}
会員に自由入力を求めると、入力者それぞれの個性が現れ、データをまとめる側の頭を悩ませます。
その中でも最たるものは住所ではないでしょうか。
「数字」 「新漢字旧漢字」 「全角半角」 「大文字小文字」 「記号」などなど、ありとあらゆる個性をもってエンジニアを苦しめにきます。
今回は「記号」の中の「疑似ハイフン」に限りですが、全て「-」に置換します。
その中でも最たるものは住所ではないでしょうか。
「数字」 「新漢字旧漢字」 「全角半角」 「大文字小文字」 「記号」などなど、ありとあらゆる個性をもってエンジニアを苦しめにきます。
今回は「記号」の中の「疑似ハイフン」に限りですが、全て「-」に置換します。
※ 入力者の個性次第では、サンプル以外にも入力される可能性が御座いますので、サンプルご利用の際はご注意ください。
連想配列のキーと値を連結
Code:
$array = [
'A' => 'あ',
'I' => 'い',
'U' => 'う',
'E' => 'え',
'O' => 'お',
];
$result = array_map(function($key, $value) {
return $key.' = '.$value;
}, array_keys($array), array_values($array));
Result:
array(5) {
[0]=>
string(7) "A = あ"
[1]=>
string(7) "I = い"
[2]=>
string(7) "U = う"
[3]=>
string(7) "E = え"
[4]=>
string(7) "O = お"
}
あまり利用する場面を思いつきませんが、「key」と「value」を使って「optionタグ」を生成する際などに使えるかも知れません。
複数の配列を多次元配列に変換
Code:
$array1 = [
'1',
'2',
'3',
];
$array2 = [
'a',
'i',
'u',
];
$array3 = [
'あ',
'い',
'う',
];
$result = array_map(null, $array1, $array2, $array3);
Result:
array(3) {
[0]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "a"
[2]=>
string(3) "あ"
}
[1]=>
array(3) {
[0]=>
string(1) "2"
[1]=>
string(1) "i"
[2]=>
string(3) "い"
}
[2]=>
array(3) {
[0]=>
string(1) "3"
[1]=>
string(1) "u"
[2]=>
string(3) "う"
}
}
関数以外にも「null」を渡すことにより、それぞれの配列を各グループ毎にまとめた、連想配列を作成することも出来ます。
「sql」の「insert文」を作成する時など。
「sql」の「insert文」を作成する時など。
他の書き方
foreachで代用
配列要素、一つ一つにアクセスし結果を返す関数なので、当然「foreach」でも代用可能です。
code量で言えばどちらも大差ないような。
個人的には「参照渡し」を利用したくないので、重宝する場面もあります。
code量で言えばどちらも大差ないような。
個人的には「参照渡し」を利用したくないので、重宝する場面もあります。
まとめ
今回は「array_map」の解説となりました。
あまり使う機会の多い関数ではありませんが、よく使う処理を関数としてまとめておいたりすると色々と役立ったりします。
個人的に、関数が先か、配列が先か、「array_filter」とごっちゃになったりします。
あまり使う機会の多い関数ではありませんが、よく使う処理を関数としてまとめておいたりすると色々と役立ったりします。
個人的に、関数が先か、配列が先か、「array_filter」とごっちゃになったりします。