Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

配列関数

More than 5 years have passed since last update.

未だに配列関数を上手に使えないので自分なりにまとめ

array_filter

コールバック関数を使用して、配列の要素をフィルタリングする

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

$callbackの関数で$arrayの配列をフィルタリングし、結果がtrueの場合に$arrayの現在の値が結果の配列に入る。連想配列の場合キーは保持。
※コールバック関数は真偽を返すものである必要がある

array_filter
function odd($num){
  //奇数かどうかを返す
  return($num & 1);
}

function even($num){
  //偶数かどうかを返す
  return(!($num & 1));
}

$arr = [1,2,3,4,5];
print_r(array_filter($arr,"odd"));
/*
Array
(
    [0] => 1
    [2] => 3
    [4] => 5
)
*/

print_r(array_filter($arr,"even"));
/*
Array
(
    [1] => 2
    [3] => 4
)
*/

array_map

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

array array_map ( callable $callback , array $array1 [, array $... ] )

$array1 の各要素に $callbackの関数を適用した後、 その全ての要素を含む配列を返す。array_mapに渡される配列の数と、$callbackが受け付けるパラメータの数は一致している必要がある。

2つ以上の配列を使う時、配列の長さは等しい必要がある。
もし長さが違った場合は、短い方を空の要素で埋めて、長い方に合わせる。

array_map
function en($n,$m){
    return ($n."は英語で【".$m."】です。");
}

function fr($n,$m){
    return ($n."はフランス語で【".$m."】です。");
}

$arr1 = [1,2,3,4,5,6];
$arr2 = ["one","two","three","four","five","six"];
$arr3 = ["un","deux","trois","quatre","cinq"];

print_r(array_map("en",$arr1,$arr2));
/*
Array
(
    [0] => 1は英語で【one】です。
    [1] => 2は英語で【two】です。
    [2] => 3は英語で【three】です。
    [3] => 4は英語で【four】です。
    [4] => 5は英語で【five】です。
    [5] => 6は英語で【six】です。
)
*/

print_r(array_map("fr",$arr1,$arr3));
/*
Array
(
    [0] => 1はフランス語で【un】です。
    [1] => 2はフランス語で【deux】です。
    [2] => 3はフランス語で【trois】です。
    [3] => 4はフランス語で【quatre】です。
    [4] => 5はフランス語で【cinq】です。
    [5] => 6はフランス語で【】です。//$arr3の要素は5つしかないので【】の中は空になる
)
*/

配列の配列を生成

コールバック関数の名前としてNULLを用いることで配列の配列を構築することができる1

array_map
print_r(array_map(null,$arr1,$arr2,$arr3));

/*
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => one
            [2] => un
        )
    [1] => Array
        (
            [0] => 2
            [1] => two
            [2] => deux
        )
    [2] => Array
        (
            [0] => 3
            [1] => three
            [2] => trois
        )
    [3] => Array
        (
            [0] => 4
            [1] => four
            [2] => quatre
        )
    [4] => Array
        (
            [0] => 5
            [1] => five
            [2] => cinq
        )
    [5] => Array
        (
            [0] => 6
            [1] => six
            [2] => 
        )
)
*/

array_merge

ひとつまたは複数の配列をマージする

array array_merge ( array $array1 [, array $... ] )

キーが同じ文字列の場合は後ろの値2で上書き 。
キーが数字の場合は0から振りなおされて値は追記される。

array_merge
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));

print_r(array_merge_recursive($ar1, $ar2));
/*
Array
(
    [color] => Array
        (
            [favorite] => green //$ar1["color"]["favorite"]の"red"が上書きされてなくなる
            [0] => blue //$ar2["color"][0]の値が追記
        )

    [0] => 5 //$ar1[0]
    [1] => 10 //$ar2[0]
)
*/

array_merge_recursive

二つ以上の配列を再帰的にマージする

array array_merge_recursive ( array $array1 [, array $... ] )

キーが同じ文字列の場合は一つの配列にまとめられる。
キーが数字の場合は0から振りなおされて値は追記される。

array_merge_recursive
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));

print_r(array_merge_recursive($ar1, $ar2));
/*
Array
(
    [color] => Array
        (
            [favorite] => Array
                (
                    [0] => red     //$ar1["color"]["favorite"]
                    [1] => green   //$ar2["color"]["favorite"]
                )

            [0] => blue //$ar2["color"][0]
        )

    [0] => 5  //$ar1[0]
    [1] => 10 //$ar2[0]
)
*/

  1. Pythonとかだとzip関数というものがあるらしい 

  2. 最初の値を残したい場合は配列結合演算子+を使う。 

ao_love
にわかぺちぱー
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away