PHP 現場で使った愉快な配列メソッド達

## はじめに
今回は現場で使用した配列メソッドの使用方法についてまとめました。
すべての使い方を紹介しているわけではないのでご了承ください。
また、この記事を読んでぜひとも愉快なエンジニアになる一助になれば嬉しいです。

## 紹介する愉快な配列メソッド達
・array_key_first
・array_key_exists
・array_keys
・array_merge
・in_array
・array_search
・array_column

## array_key_first
配列内の先頭メソッドを取得します。
連想配列の場合は、先頭keyを取得します。
https://www.php.net/manual/ja/function.array-key-first.php

```php
$array = [
	'A' => 'a',
	'B' => 'b',
	'C' => 'c',
];

$result = array_first($array);

print_r($result);  // 結果：A
```

## array_key_exists
指定したkeyが配列にあるかどうかを調べます。
下記のコードは、key="a"に該当するvalueを返します。
なければ、keyをそのまま返すというコードになります。
「key:value」という形でドロップダウンを作成するときに、こんな感のコードを現場でよく使用しました。
valueが存在しない場合もあるので、その場合はそのままkeyを出力することを目的として実装しました。
https://www.php.net/manual/ja/function.array-key-exists.php
http://taustation.com/php-array-key-exists/

``` php
$key = "a";
$list = [
	'a' => 'あ',
	'b' => 'い',
	'c' => 'う',
];

if (array_key_exists($key, $list)) {
    // keyが一致するvalueを出力
    return $list[$key];
} else {
    // そのままkeyを出力
    return $key;
}
```

## array_keys
配列内のkeyデータ、あるいは指定したkeyに該当する配列番号を取得する.

[https://www.sejuku.net/blog/28533](https://www.notion.so/a5972ecbb5f34c3aabd037659075a529)

``` php
// 配列内のkeyを出力
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));

// 指定したkeyに一致する配列番号を出力
$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));

// 配列内のkeyを出力(valueが配列のケース)
$array = array("color" => array("blue", "red", "green"),
               "size"  => array("small", "medium", "large"));
print_r(array_keys($array));

// 結果
Array
(
    [0] => 0
    [1] => color
)
Array
(
    [0] => 0
    [1] => 3
    [2] => 4
)
Array
(
    [0] => color
    [1] => size
)

```

## array_merge
1つ目の配列に対して2つ目の配列が追加します。
また、1つ目の配列にない要素を2つ目の配列が持っている場合、
**持っていない要素を追加します。**
https://www.php.net/manual/ja/function.array-merge.php
https://www.sejuku.net/blog/28533

■ 一次配列の場合
1つ目の配列に対して2つ目の配列を追加します。
```php
//配列を作成
$array1 = [1, 2, 3];
$array2 = [10, 20, 30];
$array3 = [100, 200, 300];
 
//配列を結合する
$array = array_merge($array1, $array2, $array3);
 
print_r($array);

// 結果
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 10
    [4] => 20
    [5] => 30
    [6] => 100
    [7] => 200
    [8] => 300
)
```

■ 連想配列の場合
配列fruits1に対して配列fruits2のデータを追加します。
keyの値が同じもの同士は、後の配列($fruits2)の値が格納される(更新されるイメージ)。
1つ目の配列にない要素を2つ目の配列が持っている場合、持っていない要素を追加します。
``` php
$fruits1 = [
	"A" =>'strawberry',
    "B" =>'cherry',
    "C" =>'watermelon'
];

$fruits2 = [
	"A" =>'apple',
    "B" =>'orange',
    "C" =>'melon',
    "D" =>'banana',
    "E" =>'pineapple'
];
 
//配列をマージする
$fruits_merge = array_merge($fruits1, $fruits2);
 
print_r($fruits_merge);

// 結果
Array
(
    "A" => 'apple'        // strawberry → appleに更新
    "B" => 'orange'       // cherry → orangeに更新
    "C" => 'melon'        // watermelon → melonに更新
    "D" => 'banana'       // $fruits2のデータが新しく追加
    "E" => 'pineapple'    // $fruits2のデータを新しく追加
)
```


## in_array
指定した値が含まれているか調べることができます。
ちなみに、第三引数にtrueを加えると厳密な方比較を行います。
https://www.php.net/manual/ja/function.in-array.php

``` php
$array = ["A", "B", "C"];
if (in_array("B", $array, true)) {
    echo "OK!";
}
```

## array_search
指定した値が含まれているか調べることができます。
値が含まれている場合はその「配列番号」および「key」を返し
含まれてなければfalseを返します。
ちなみに、第三引数は厳密なかな比較を実行します。
https://qiita.com/rorensu2236/items/c3538629a9d9fed4daaa
https://www.php.net/manual/ja/function.array-search.php

■ 配列が一次元配列の場合
戻り値は、第一引数で指定した値に該当する配列番号を返します。
```php
$array = ["A", "B", "C"];

$result = array_search("B", $array, , true);

print_r($result);    // 結果：1
```

■ 連想配列の場合
第一引数で指定した値に該当するvalueがある場合、そのkeyを返します。
```php
$array = [
	"A" => 'a',
    "B" => 'b',
    "C" => 'c'
];

$result = array_search("b", $array);

print_r($result);    // 結果:B
```
## array_column
下記2点の機能があります。
・指定したkeyに該当するvalueを出力します。
・指定したkeyとvalueに該当するものを抜き出して配列を作成します。
https://syncer.jp/Web/PHP/Reference/Function/array_column/
https://yu-nix.com/archives/php-array-column/
https://www.php.net/manual/ja/function.array-column.php

■ 指定したkeyに該当するvalue値を出力
```php
$queue = [
    [
		"name" => "taro" ,
		"nation" => "japan" ,
	] ,
	[
		"name" => "bob" ,
		"nation" => "usa" ,
	]
];

$result = array_column($queue, "name");

print_r($result);

// 結果
Array
(
    [0] => "taro"
    [1] => "bob"
)
```

■ 指定したkeyとvalueに該当するものを抜き出して配列を作成
第一引数が操作対象の配列、第二引数がvalue、第三引数がkeyとなります。

```php
$result = array_column($queue, "name", "nation");

print_r($result);

// 結果
Array
(
	"taro" => "japan"
    "bob" => "usa"
)
```

## さいごに
今回は、現場で実際に使用した配列メソッドを紹介いたしました。
現場で新しくメソッドを使った際には、更新しようと思います。
最後まで読んでいただきありがとうございました。