PHP 上級試験範囲 配列 個人的な備忘録

# 配列の展開と抽出

## list()

`list()`を使うと、配列の値を取り出して、複数の変数に順番に格納することができる。なお、スクリプト内のすべての配列をリスト形式で出力する関数ではない。

```php:php
$array = array(2020, 1, 2);
list($y, $m, $d) = $array;

echo $y, '年';
echo $m, '月';
echo $d, '日';

// 結果：2020年1月2日
```

配列の要素数に対してlist()に指定した変数が少ない場合は、余った要素は無視される。逆に、配列の要素数に対して変数が多い場合は、余った変数には`NULL`がセットされる。

配列の要素を取り出す必要がない箇所では、変数の指定を省略することもできる。

```php:php
$array = array(2020, 1, 2);
list(, $m, $d) = $array;

echo $m, '月';
echo $d, '日';

// 結果：1月2日
```

## array_slice()

`array_slice()`を使用すると配列から要素を抽出することができる。第一引数に抽出開始位置の要素、第二引数に抽出数を指定すると、それを抽出して新しい配列として返す。

```php:php
$array = array('a', 'b', 'c', 'd');
$array = array_slice($array, 1, 2);

var_dump($array);

/*
結果：
array(2) {
  [0]=>
  string(1) "b"
  [1]=>
  string(1) "c"
}
*/
```

## array_chunk()

`array_chunk()`を使用すると、配列を、指定した要素のかたまり（チャンク）に分割することができる。

配列の要素を、指定した要素ずつの配列に分割し、その配列を返す。

```php:php
$array = array('a', 'b', 'c', 'd', 'e');
$array = array_chunk($array, 2);

var_dump($array);

/*
結果：
array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
  }
  [1]=>
  array(2) {
    [0]=>
    string(1) "c"
    [1]=>
    string(1) "d"
  }
  [2]=>
  array(1) {
    [0]=>
    string(1) "e"
  }
}
*/
```

## array_splice()

配列1の左端から数えた「開始位置」から、指定された「削除数」だけの要素を削除する。「削除数」は省略可能であり、省略した場合は、「開始位置」から配列の終わりまでの要素が削除される。配列2が指定された場合は、削除した位置に配列2の要素を挿入する。配列2が省略された場合は、挿入操作は行われない。

### 削除数未指定の場合

```php:php
$color = array('赤', '緑', '青', '白', '黒');

// 削除する要素を出力
var_dump(array_splice($color, 2));

// array_spliceで上記の要素を削除された残りの要素を出力
var_dump($color);

/*
結果：削除する要素を出力
array(3) {
  [0]=>
  string(3) "青"
  [1]=>
  string(3) "白"
  [2]=>
  string(3) "黒"
}

結果：array_spliceで上記の要素を削除された残りの要素を出力
array(2) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "緑"
}
*/
```

### 削除数を指定した場合

```php:php
$color = array('赤', '緑', '青', '白', '黒');

// 削除する要素を出力
var_dump(array_splice($color, 1, 4));

// array_spliceで上記の要素を削除された残りの要素を出力
var_dump($color);

/*
結果：削除する要素を出力
array(4) {
  [0]=>
  string(3) "緑"
  [1]=>
  string(3) "青"
  [2]=>
  string(3) "白"
  [3]=>
  string(3) "黒"
}

結果：array_spliceで上記の要素を削除された残りの要素を出力
array(1) {
  [0]=>
  string(3) "赤"
}
*/
```

### 別配列を指定した場合

```php:php
$color = array('赤', '緑', '青', '白', '黒');

// 削除する要素を出力
var_dump(array_splice($color, 1, 4, array('紫', '橙', '黄')));

// array_spliceで上記の要素を削除された残りの要素を出力
var_dump($color);

/*
結果：削除する要素を出力
array(4) {
  [0]=>
  string(3) "緑"
  [1]=>
  string(3) "青"
  [2]=>
  string(3) "白"
  [3]=>
  string(3) "黒"
}

結果：array_spliceで上記の要素を削除された残りの要素を出力
array(4) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "紫"
  [2]=>
  string(3) "橙"
  [3]=>
  string(3) "黄"
}
*/
```

# 配列のキーや値の操作

## array_key_exists()

isset(配列[キー])は、配列のキーが存在してもキーに対応する値がNULLの時は、falseを返す。値がNULLであるかどうかにかかわらずキーが配列に存在するかどうかを確認するには、`array_key_exists()`を使用する。

## array_search()

値を指定して、その値に対応するキーを検索するには、`array_search()`を使用する。配列から値を検索し、見つかった場合は値に対応するキーを返し、見つからなかった場合はfalseを返す。指定した値が配列内に複数含まれる場合は、最初に見つかった要素のキーが返される。

# 配列の集合演算

## array_unique()

`array_unique()`は、配列から重複する値を取り除くために使用する。`array_filter()`と同様、元の配列のキーが維持されている。

```php:php
$color = array('赤', '緑', '青', '白', '黒', '青', '灰', '青');
$color = array_unique($color);

var_dump($color);

/*
結果：
array(6) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "緑"
  [2]=>
  string(3) "青"
  [3]=>
  string(3) "白"
  [4]=>
  string(3) "黒"
  [6]=>
  string(3) "灰"
}
*/
```

## array_intersect

`array_intsersect()`は、複数の配列に共通して含まれる値を集める。2つの配列に共通して含まれる値を集めた配列を返す。

```php:php
$color1 = array('赤', '緑', '青');
$color2 = array('白', '黒', '赤');
$color  = array_intersect($color1, $color2);

var_dump($color);

/*
結果：
array(1) {
  [0]=>
  string(3) "赤"
}
*/
```

# 配列への値の追加と削除

## 配列の先頭に作用する

### array_unshift()

配列の先頭に値を追加するには、`array_unshift()`を使用する。

### array_shift()

配列の先頭の値を削除するには、`array_shift()`を使用する。

## 配列の末尾に作用する

### array_push()

配列の末尾に値を追加するには、`array_push()`を使用する。

### array_pop()

配列の末尾の値を削除するには、`array_pop()`を使用する。

# 参照

徹底攻略 PHP5 技術者認定 [上級] 試験問題集 [PJ0-200]対応