# ch05 — array_keys / array_values

Source: https://php-school.pages.dev/topics/array-assoc/ch05-array-keys-values/
Site: AIと学ぶPHPの学校 (https://php-school.pages.dev)
Lesson: 連想配列
Level: L2

Reference (official): https://www.php.net/manual/ja/language.types.array.php

## 本文

# ch05 — array_keys / array_values

## 概要

連想配列を扱っていると、「キーだけ全部欲しい」「値だけ並べたい」という場面がよく出てくる。たとえば設定ファイルに含まれる項目名を列挙したい時はキー、合計を集計したい時は値だけが必要、というように **片方だけを取り出して使いたい** ケースだ。これを 1 行で実現する関数が **`array_keys`** と **`array_values`**。

`array_keys($arr)` は連想配列のキーを集めて **添字配列** として返し、`array_values($arr)` は値を同じく添字配列として返す。返り値が「キー 0, 1, 2... の素直な添字配列」になるのがポイントで、ここから `count()` で要素数を数えたり、`foreach` で順に処理したり、`implode()` で連結したりと、添字配列向けの関数群がすべて使えるようになる。`array_values` は「連想配列の構造を捨ててリストに変換する」用途でも頻出する。

逆方向の操作には **`array_combine($keys, $values)`** がある。`array_keys` と `array_values` で分解した配列を、後で別の組み合わせに再合成したい時の関数だ。この章ではまず分解側の 2 関数に集中して、ドリル 03 の「キーに特定の文字列を含むものを数える」で `array_keys` の典型的な使い方 (条件フィルタの前段) を体験する。

## 学習目標

- `array_keys($arr)` でキーだけの添字配列を取り出せる
- `array_values($arr)` で値だけの添字配列を取り出せる
- 取り出した配列を foreach や count と組み合わせて使える

## 所要時間

スライド 4 分 + ドリル 3 問 = **15 分**

## ドリル

| no | 内容 |
|---|---|
| 01 | `array_keys` で全キーを 1 行ずつ出力 |
| 02 | `array_values` で全値を 1 行ずつ出力 |
| 03 | キーに特定の文字列を含むキーの数を数える |

## 採点

```bash
php scripts/grade.php topics/array-assoc/ch05-array-keys-values/drill/01-keys/
```

## 関連チャプター

- [`ch04-foreach-key-value`](../ch04-foreach-key-value/) — キーと値を同時に扱う前章
- [`ch06-sort-asc`](../ch06-sort-asc/) — 値の昇順ソート
- [`ch08-array-search`](../ch08-array-search/) — `array_keys` の代わりに `array_key_exists` で存在チェック

## スライド

---
marp: true
theme: dojo
paginate: true
size: 16:9
---

<!--
LLM_CONTEXT:
  Lesson 5 / Chapter 5
  目的: array_keys / array_values で連想配列からキーや値だけの添字配列を取り出せるようにする
  扱わない: 並び替え (ch06,ch07) / 検索 (ch08) / 多次元 (L6)
  読み上げ時間目安: 3 分半〜4 分
-->

# array_keys / array_values

Lesson 5 / Chapter 5

---

## 「キーだけ」「値だけ」が欲しい場面がある

```php
<?php
$scores = [
    'math'    => 80,
    'english' => 70,
    'science' => 90,
];
```

- 「科目名の一覧だけ欲しい」 → キーが欲しい
- 「点数の一覧だけ欲しい」 → 値が欲しい

`foreach` で取り出してもよいが、専用関数がある。

---

## `array_keys($arr)` でキーの配列

```php
<?php
$scores = [
    'math'    => 80,
    'english' => 70,
    'science' => 90,
];

$keys = array_keys($scores);
print_r($keys);
```

実行結果:

```
Array
(
    [0] => math
    [1] => english
    [2] => science
)
```

- 戻り値は **添字配列** (`0, 1, 2` がキー)
- 元の挿入順を保つ

---

## `array_values($arr)` で値の配列

```php
<?php
$scores = [
    'math'    => 80,
    'english' => 70,
    'science' => 90,
];

$values = array_values($scores);
print_r($values);
```

実行結果:

```
Array
(
    [0] => 80
    [1] => 70
    [2] => 90
)
```

- これも添字配列で返ってくる
- 値だけ集めて `array_sum` で合計、なども書きやすい

---

## 取り出した配列を foreach する

```php
<?php
$scores = [
    'math'    => 80,
    'english' => 70,
    'science' => 90,
];

foreach (array_keys($scores) as $key) {
    echo $key . "\n";
}
```

実行結果:

```
math
english
science
```

- `foreach (array_keys(...) as $key)` は「キー一覧で回す」典型パターン
- 添字配列を返すので、`$nums[0]` のように添字でもアクセスできる

---

## このチャプターでできるようになること

✅ `array_keys($arr)` でキー一覧の添字配列を取得できる
✅ `array_values($arr)` で値一覧の添字配列を取得できる
✅ 取り出した配列を foreach できる
✅ count で要素数を測れる

→ ドリルへ
