【PHP】かゆいところに手が届く配列につかう関数まとめ

1. [array_merge](#1-array_merge) --配列同士を結合する
2. [array_merge_recursive](#2-array_merge_recursive) -- 配列同士を結合する（キーが同じ文字列の場合も上書きされない）
3. [array_count_values](#3-array_count_values) -- 配列の値の登場回数を調べる
4. [array_diff_key](#4-array_diff_key) -- 配列のキーの差異を確認する
5. [array_key_exists](#5-array_key_exists) -- 指定したキーが配列に存在するか調べる
6. [array_filter](#6-array_filter) -- 配列からキーまたは値を指定し配列を抽出する
7. [array_fill_keys](#7-array_fill_keys) -- 対象の配列をキーにして値を設定する
8. [array_map](#8-array_map) -- 配列の要素全てに指定した関数を適用させる
9. [array_rand](#9-array_rand) -- 配列から要素をランダムに取得する
10. [array_chunk](#10-array_chunk) --  配列を指定した要素の数ずつ分割する
11. [array_column](#11-array_column) -- 多次元配列から特定カラムの配列を作る
12. [array_change_key_case](#12-array_change_key_case) -- キー名の大文字、小文字を変換する
13. [array_flip](#13-array_flip) -- 配列のキーと値を反転する
14. [extract](#14-extract) -- 連想配列のキー名から変数を作る

# 1. array_merge
配列同士を結合する
Key値が重複していた場合は、ゼロから連続した数値に置き換えられる

```php
array_merge ( array $配列 [, 追加する配列 $... ] )
```

第一引数に対象の配列を指定
以降は追加する配列を複数指定できる

また、第一引数のみ指定した場合、キーが数値ならゼロからキーが振られる

```php
//配列
$fruits1 = ['apple', 'orange'];
$fruits2 = ['strawberry', 'cherry'];
$fruits3 = ['anzu', 'papaya'];

//結合
$fruits = array_merge($fruits1, $fruits2, $fruits3);

//出力結果
Array
(
    [0] => apple
    [1] => orange
    [2] => strawberry
    [3] => cherry
    [4] => anzu
    [5] => papaya
)
```

⚡️Key値の数値が重複していた場合は、ゼロから連続した数値に置き換えられる

```php
//配列
$fruits1 = [
            0=>'apple',
            1=>'orange',
            2=>'melon',
            3=>'banana',
            4=>'pineapple'
          ];
 
$fruits2 = [
            0=>'strawberry',
            1=>'cherry',
            2=>'watermelon'
           ];
					 
//結合
$fruits = array_merge($fruits1, $fruits2);

//出力結果
Array
(
    [0] => apple
    [1] => orange
    [2] => melon
    [3] => banana
    [4] => pineapple
    [5] => strawberry
    [6] => cherry
    [7] => watermelon
)
```

⚡️キーが文字列で重複していた場合は上書きされ先の値は破棄されてしまう

```php
//配列
$fruits1 = [
            'key1'=>'apple',
            'key2'=>'orange',
            'key3'=>'melon',
            'key4'=>'banana'
          ];
 
$fruits2 = [
            'key1'=>'strawberry',
            'key2'=>'cherry'
           ];
					 
//結合
$fruits = array_merge($fruits1, $fruits2);

//出力結果
Array
(
    key1 => strawberry
    key2 => cherry
    key3 => melon
    key4 => banana
)
```

# 2. array_merge_recursive
配列同士を結合する
keyの添字が文字列の場合、同じ文字列同士で配列を作成できる

```php
array_merge_recursive ( array $配列 [, 追加する配列 $... ] )
```

第一引数に対象の配列を指定
以降は追加する配列を複数指定できる
添字が数値の場合の動作はarray_mergeと同じ処理

```php
//連想配列
$fruits1 = [
            'key1'=>'apple',
            'key2'=>'orange',
            'key3'=>'melon',
            'key4'=>'banana',
            'key5'=>'pineapple'
          ];
 
$fruits2 = [
            'key1'=>'strawberry',
            'key2'=>'cherry',
            'key3'=>'watermelon'
           ];
					 
//結合
$fruits_merge = array_merge_recursive($fruits1, $fruits2);

//出力結果
Array
(
    [key1] => Array
        (
            [0] => apple
            [1] => strawberry
        )
 
    [key2] => Array
        (
            [0] => orange
            [1] => cherry
        )
 
    [key3] => Array
        (
            [0] => melon
            [1] => watermelon
        )
 
    [key4] => banana
    [key5] => pineapple
)
```

# 3. array_count_values
配列の値の登場回数を調べる

```php
array_count_values ( array $array )
```

第一引数に対象の配列

```php
// 配列
	$queue = [ "a", "b", "c", "d", "b", "c", "b" ] ;

	// 登場回数を取得
	$result = array_count_values( $queue ) ;
	
	//出力結果
	Array
(
    [a] => 1
    [b] => 3
    [c] => 2
    [d] => 1
)
```

# 4. array_diff_key 
配列のキーの差異を確認する

```php
array_diff_key ( array $array1 , array $array2 [, array $... ] )
```

第一引数に対象の配列
第二引数に比較対象の配列

```php
	// 配列
	$queue1 = [
		"a" => 1 ,
		"b" => 2 ,
		"c" => 3 ,
	] ;

	$queue2 = [
		"a" => 11 ,
		"b" => 12 ,
	] ;

	// 第2引数にはないキーを調べる
	$result = array_diff_key( $queue1, $queue2 ) ;

//出力結果
Array
(
    [c] => 3
)
```

# 5. array_key_exists
指定したキーが配列に存在するか調べる
in_arrayより高速、値がnullでも検索ができる

```php
array_key_exists ( $キー名 , $配列名 )
```

第一引数に調べたいキー名を指定
第二引数に対象の配列名を指定

返り値：

キーが存在している場合はTRUE

キーが存在しない場合はFALSEが返ってくる

# 6. array_filter
配列からキーまたは値を指定し配列を抽出する

```php
array_filter(配列, コールバック関数 [, フラグ]);
```

第1引数に対象の配列、第2引数にコールバック関数でなにを抽出するかを指定した関数を入れる

フラグには以下で指定することができる

ARRAY_FILTER_USE_KEY : 配列のキーで抽出する

ARRAY_FILTER_USE_BOTH : 配列のキーと値で抽出する

```php
//配列
$fruits = ['apple', 'orange', 'melon'];

//orangeを抽出
$res = array_filter($fruits, function($attr){
    return $attr == 'orange';
});

//出力結果
Array
(
	[1] => orange
)
```

# 7. array_fill_keys
対象の配列をキーにして値を設定する

```php
array_fill_keys ( array $keys , mixed $value )
```

第一引数にキーになる配列を指定
第二引数に入れたい値

```php
	// 配列を作成
	$queue = [ "a", "b", "c" ] ;

	$value = [ "A", "B", "C" ] ;

	// $queueをキー、$valueを値にした配列を作成
	$result = array_fill_keys( $queue, $value ) ;
	
	//出力結果
	Array
(
    [a] => Array
        (
            [0] => A
            [1] => B
            [2] => C
        )

    [b] => Array
        (
            [0] => A
            [1] => B
            [2] => C
        )

    [c] => Array
        (
            [0] => A
            [1] => B
            [2] => C
        )

)
```

# 8. array_map
配列の要素全てに指定した関数を適用させる

```php
array_map( コールバック関数名 , $配列1 [, $配列2, $... ] )
```

第一引数にコールバック関数名もしくは関数を入れる
以降はコールバック関数に適用する配列名を複数指定できる

```php
//コールバック関数
function valuecalc($n)
{
    return($n + $n);
}

//配列
$value_array = [100, 200, 300, 400, 500];

//配列のすべての要素にコールバック関数を適応
$value_array2 = array_map('valuecalc', $value_array);

//出力結果
Array
(
    [0] => 200
    [1] => 400
    [2] => 600
    [3] => 800
    [4] => 1000
)
```

# 9. array_rand
配列から要素をランダムに取得する

```php
array_rand ( array $array ,$num )
```

第一引数に対象の配列
第二引数に取得したい要素の数

```php
	// 配列を作成
	$queue = [ "a", "b", "c", "d", "e" ] ;

	// 配列から3つ要素を取得
	$result = array_rand( $queue, 3 ) ;

//出力結果
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(3)
  [2]=>
  int(4)
}

※第一引数のみの場合はひとつだけキーを取得する
値ではないので注意

//配列
	$queue = [ "a", "b", "c", "d", "e" ] ;

	// 配列からランダムにひとつのキーを取得
	$result = array_rand( $queue ) ;
	
	//出力結果
	int(0)
```

# 10. array_chunk
配列を指定した要素の数ずつ分割する

```php
array_chunk ( array $array , int $size [, bool $preserve_keys = false ] )
```

第一引数に対象の配列
第二引数に分割後の各配列の最大要素数
第三引数にキーが数値の場合保持するか。デフォルトでは保持しない。

```php
// 配列
	$queue = [ "a", "b", "c", "d", "e" ] ;

	// 配列を分割
	$result = array_chunk( $queue, 2 ) ;
	
	//出力結果
	Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
            [1] => d
        )

    [2] => Array
        (
            [0] => e
        )

)
```

# 11. array_column
多次元配列から特定カラムの配列を作る

```php
array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )
```

第一引数に対象の多次元配列
第二引数にキー名を指定、nullを指定した場合は配列全体を返す
第三引数に新しい配列の各要素のキー名となる、初期値はnull

```php
	// 配列
	$queue = [
		[
			"date" => "2015/11/1" ,
			"score" => 100 ,
			"color" => "red" ,
		] ,
		[
			"date" => "2015/11/2" ,
			"score" => 75 ,
			"color" => "blue" ,
		] ,
		[
			"date" => "2015/11/3" ,
			"score" => 90 ,
			"color" => "green" ,
		] ,
	] ;

	// キーscoreを取得
	$result = array_column( $queue, "score" ) ;
	
	//出力結果
	Array
(
    [0] => 100
    [1] => 75
    [2] => 90
)
```

# 12. array_change_key_case
キー名の大文字、小文字を変換する

```php
array_change_key_case ( array $array [, int $case = CASE_LOWER ] )
```

第一引数に対象の配列
第二引数に定数のCASE_UPPER(大文字)、またはCASE_LOWER(小文字)を指定
※指定しない場合は小文字変換

```php
//配列
	$array = [
		"Syncer" => "good!" ,
		"Arayu" => "bad!" ,
	] ;

	// 小文字に変換
	$response = array_change_key_case( $array, CASE_UPPER ) ;
	
	//出力結果
		Array
(
		[SYNCER] => "good!" ,
		[ARAYU] => "bad!" ,
)
	
```

# 13. array_flip
配列のキーと値を反転する

```php
array_flip ( array $array )
```

第一引数に対象の配列

```php
	// 配列
	$queue = [
		"a" => "A" ,
		"b" => "B" ,
		"c" => "C" ,
	] ;

	// キーと値を反転する
	$result = array_flip( $queue ) ;
	
	//出力結果
	Array
(
    [A] => a
    [B] => b
    [C] => c
)
	
```

# 14. extract
キー名と同じ名前の変数を作る

```php
extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] )
```

第一引数に対象の連想配列
第二引数にすでに変数が存在してい場合にどのような挙動をするかを指定
（別名保存する、上書きする等）
第三引数に第二引数の設定によりprefixを使用する場合指定

```php
//重複する変数名
$c1 = 1;
$c2 = 1;

//配列
$ar1 = [
	'c1'=>'赤',
	'c2'=>'黄',
	'c3'=>'青'
	];

//変数名が重複した場合 'pre'を付与
extract($ar1,EXTR_PREFIX_SAME,"pre");

//出力結果
$pre_c1 = 赤
$pre_c2 = 黄
$c3 = 青
```