array_mapで簡単な配列処理をしてみた
この記事でわかること
- array_mapが何かわかる
- array_mapを使った配列処理の方法の例がなんとなくわかる
a. <パターン①> 既存の配列の要素をそのまま出力してみる
b. <パターン②> 2次元配列に入れ直す
c. <パターン③> explode分割した要素の片方だけ配列に入れる
ネタバレ
そもそもarray_mapって何?
PHPの公式ドキュメントでは
指定した配列の要素にコールバック関数を適用する
と言われている
具体的な書き方はこんな感じ
array_map(?callable
arrays): array callback, array $array, array ...
つまり第1引数にコールバック関数を使い、第2、第3・・・・の引数には配列を指定する。
言い換えると、array_mapとは
指定した配列の要素を、別の関数を使って処理することができる関数がである。
つまり
・ イメージはこんな感じ!
既存の配列をコールバック関数のルールを使って処理して新しい配列を生成する
今回の出力するテーマ
誰かに家族を紹介する時に、一人ずつ苗字をつけて紹介はしないですよね?
その処理を書いてarray_mapを使って出力してみようと思います。
ちなみに過去にfor文とforeachでトライしています。こちらも読んでいただけたら喜びます😄
→空行のある文字列を分割して出力したい (explodeを使う)
パターン① <家族全員分のフルネームを出力させてみる>
ではっ!!!
野比家を配列でまとめるとこんな感じ。
$nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子", "野比 静香", "野比 ノビスケ", "野比 セワシ");
これを一人ずつ表示させたいのだが、単純に繰り返して表出すると下のようになる。
function output( $nobi_fam ){
echo $nobi_fam."\n";
}
$nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子", "野比 静香", "野比 ノビスケ", "野比 セワシ");
$nobi = array_map('output' ,$nobi_fam);
//出力
野比 のび太
野比 のび助
野比 玉子
野比 静香
野比 ノビスケ
野比 セワシ
登場コードの紹介
ここで登場したコードはoutput
っていう関数と、$nobi_fam
という変数とarray_map関数
です。
それぞれの関係を書いてみます。
$nobi_fam
この変数には、野比家のメンバーがフルネームで配列で入っています。
output関数
これは私が勝手に作成した関数、ユーザー定義関数
です。
ここには$nobi_fam
を引数として、
echo $nobi_fam."\n";
する。っていうシンプルな処理を書いています。
パターン② <二次元配列で管理して繰り返し処理>
出力イメージはこんな感じです。
野比家は
のび太
玉子
のび助
静香
ノビスケ
セワシ
です
こうするために、今回は氏名の入力され方の特徴を利用してみましょう。
今回は氏名に半角スペースが入っていますね。
なので、それを活かして配列を組み直してみます。
一つの文字列を半角スペースを境に分割して配列の中に入れ直し、二次元配列の形にします。
イメージとしてはこんな感じ。
$nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子");
function output( $nobi_fam ){
return explode(" ", $nobi_fam);
}
$result = array_map('output' ,$nobi_fam);
var_dump($result);
//出力
array(3) {
[0]=>
array(2) {
[0]=>
string(6) "野比"
[1]=>
string(9) "のび太"
}
[1]=>
array(2) {
[0]=>
string(6) "野比"
[1]=>
string(9) "のび助"
}
[2]=>
array(2) {
[0]=>
string(6) "野比"
[1]=>
string(6) "玉子"
}
}
お!!😲
ちゃんと入ってますね。
じゃあ、必要な要素を指定して出力していきましょう!
$nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子", "野比 静香", "野比 ノビスケ", "野比 セワシ");
function output( $nobi_fam ){
return explode(" ", $nobi_fam);
}
$result = array_map('output' ,$nobi_fam);
$count = count($nobi_fam);
for($i=0;$i<$count;$i++){
if($i==0){
echo $result[$i][0]."家は"."\n";
}
echo $result[$i][1]."\n";
if($i==$count-1){
echo "です";
}
}
//出力
野比家は
のび太
のび助
玉子
静香
ノビスケ
セワシ
です
出力できました😏
パターン③ <分解したもの要素一つだけ配列に入れる>
さっきのは、苗字と名前を二つ入れて扱いましたが、
苗字はほとんど使わないから、ラストネームだけでいいよ!
って場合のために、ラストネームだけを入れる方法も紹介します!
イメージはこんな感じです。
$nobi_fam = array("野比 のび太", "野比 のび助", "野比 玉子", "野比 静香", "野比 ノビスケ", "野比 セワシ");
//ここで、ラストネームだけを入れる処理を書きます
function output( $nobi_fam ){
$array = explode(" ", $nobi_fam);
$array = $array[1];
return $array;
}
$result = array_map('output' ,$nobi_fam);
$count = count($result);
for($i=0;$i<$count;$i++){
if($i==0){
echo "野比家は"."\n";
}
echo $result[$i]."\n";
if($i==$count-1){
echo "です";
}
}
//出力
野比家は
のび太
のび助
玉子
静香
ノビスケ
セワシ
です
お!
こちらもいけましたね😎
以上、array_mapを使った簡単な配列処理の記事でした!
Discussion