配列関数

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

# [array_filter](http://php.net/manual/ja/function.array-filter.php)

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

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

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

### 例

```php: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](http://php.net/manual/ja/function.array-map.php)
指定した配列の要素にコールバック関数を適用する

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

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

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

```php: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を用いることで配列の配列を構築することができる[^zip]

[^zip]: Pythonとかだとzip関数というものがあるらしい

```php: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](http://php.net/manual/ja/function.array-merge.php)
ひとつまたは複数の配列をマージする

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

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

[^mg]: 最初の値を残したい場合は配列結合演算子＋を使う。

### 例
```php: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](http://php.net/manual/ja/function.array-merge-recursive.php)
二つ以上の配列を再帰的にマージする

```php
array array_merge_recursive ( array $array1 [, array $... ] )
```
キーが同じ文字列の場合は一つの配列にまとめられる。
キーが数字の場合は0から振りなおされて値は追記される。

### 例
```php: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]
)
*/
```