🦔

array_mapで簡単な配列処理をしてみた

2022/10/14に公開

この記事でわかること

  1. array_mapが何かわかる
  2. array_mapを使った配列処理の方法の例がなんとなくわかる
    a. <パターン①> 既存の配列の要素をそのまま出力してみる
    b. <パターン②> 2次元配列に入れ直す
    c. <パターン③> explode分割した要素の片方だけ配列に入れる

ネタバレ


そもそもarray_mapって何?

PHPの公式ドキュメントでは
https://www.php.net/manual/ja/function.array-map.php

指定した配列の要素にコールバック関数を適用する

と言われている
具体的な書き方はこんな感じ

array_map(?callable callback, array $array, array ...arrays): 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