【PHP】レッスン4-02:キーが文字列の配列を理解しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:キーが文字列の配列

この記事の練習問題を解くために必要な知識:
基礎文法・制御構造・関数(レッスン1~3)配列の基本キーが文字列の配列配列の要素の追加と削除配列の調査配列の操作配列の並び替え配列の多次元化

<<前のページ PHP記事一覧 次のページ>>

PHPの「キーが文字列の配列(連想配列)」とは

この章ではPHPにおける「キーが文字列の配列」の意味や使い方を学習します。用語の解説が不要な方はここをクリックして練習問題へ飛びましょう。




PHPでは配列のキーを文字列として使用することで、簡単にデータを構造化し、意味のある形で管理できます。

これは連想配列とも呼ばれ、配列の操作を柔軟かつ直感的に行うのに役立ちます。

キーが文字列の配列(連想配列)とは?

キーが文字列の配列とは、配列のキーとして文字列を使用するPHPのデータ構造の一種です。

通常の配列ではキーが整数のインデックスになりますが、文字列をキーとして使うことで、データに意味を持たせることができます。

たとえばユーザー情報を管理する場合に、名前や年齢といった属性名をキーとして扱えます。

キーが文字列の配列は、以下のように定義できます:

// 基本構文(2つの方法)
$assocArray1 = array("name" => "John", "age" => 25, "city" => "New York");
$assocArray2 = ["name" => "John", "age" => 25, "city" => "New York"];

ここで"name", "age", "city"が文字列キー、対応する値がそれぞれ"John", 25, "New York"です。

PHPでは古いバージョンではarray()、新しいバージョンでは[]を使うことが一般的です。

キーが文字列の配列(連想配列)の使用例

以下は文字列キーを持つ配列の操作例です。

// 配列の作成
$user = [
    "name" => "Alice",
    "age" => 30,
    "city" => "Los Angeles"
];

// 値の取り出し
echo "名前: " . $user["name"] . PHP_EOL; // "Alice"
echo "年齢: " . $user["age"] . PHP_EOL; // 30

// 値の更新
$user["age"] = 31;

// 値の追加
$user["job"] = "Engineer";

// 配列全体の表示
print_r($user);

出力結果は次のようになります:

名前: Alice
年齢: 30
Array
(
    [name] => Alice
    [age] => 31
    [city] => Los Angeles
    [job] => Engineer
)

この例では文字列キーを使ってデータを容易にアクセス・操作しています。

キーが文字列の配列(連想配列)の操作

PHPにはキーが文字列の配列を操作するための便利な関数があります:

  1. array_keys(): 配列のすべてのキーを取得します。
  2. array_values(): 配列のすべての値を取得します。
  3. ksort(): キーを昇順にソートします。
  4. krsort(): キーを降順にソートします。

使用例は以下の通りです。

$user = [
    "name" => "Bob",
    "age" => 28,
    "city" => "Chicago"
];

// キーと値の取得
$keys = array_keys($user);
$values = array_values($user);
print_r($keys);  // ["name", "age", "city"]
print_r($values); // ["Bob", 28, "Chicago"]

// キーの昇順ソート
ksort($user);
print_r($user); // "age", "city", "name" の順で表示

これらの関数を使用することで、データの操作やソートが簡単になります。

まとめ

PHPのキーが文字列の配列(連想配列)はデータを意味のある形で構造化する強力な方法です。

この機能を使えばデータ操作が直感的になり、コードの可読性が向上します。

特にarray_keys(), array_values(), ksort(), krsort()などの関数を活用することで、さらに柔軟な操作が可能です。

PHPのキーが文字列の配列(連想配列)の練習問題

キーが文字列の配列を使って、基本的な配列操作を勉強しましょう。

名前、年齢、職業のデータをキーと値で構成された配列に格納し、そのデータを出力します。

また配列のキーと値の一覧を取得したり、配列をキーで昇順・降順にソートして表示します。

この問題の要件

以下の要件に従ってコードを完成させてください。

  1. 配列 $person を作成し、以下のキーと値を格納すること。
    • キー「名前」、値「田中太郎」
    • キー「年齢」、値25
    • キー「職業」、値「エンジニア」
  2. 配列 $person の内容を次のように出力すること。
    • 「キー: 名前, 値: 田中太郎」
    • 「キー: 年齢, 値: 25」
    • 「キー: 職業, 値: エンジニア」
  3. 配列のキー一覧を取得し、カンマで区切って出力すること。
    • 出力例: 「配列のキー一覧: 名前, 年齢, 職業」
  4. 配列の値一覧を取得し、カンマで区切って出力すること。
    • 出力例: 「配列の値一覧: 田中太郎, 25, エンジニア」
  5. 配列をキーで昇順にソートし、内容を出力すること。
  6. 配列をキーで降順にソートし、内容を出力すること。
  7. ソート後の結果は次のように出力すること。
    • 「キー: 名前, 値: 田中太郎」
    • 「キー: 年齢, 値: 25」
    • 「キー: 職業, 値: エンジニア」

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

配列の内容を表示します。
キー: 名前, 値: 田中太郎
キー: 年齢, 値: 25
キー: 職業, 値: エンジニア
配列のキー一覧: 名前, 年齢, 職業
配列の値一覧: 田中太郎, 25, エンジニア
キーで昇順ソートした結果:
キー: 名前, 値: 田中太郎
キー: 年齢, 値: 25
キー: 職業, 値: エンジニア
キーで降順ソートした結果:
キー: 職業, 値: エンジニア
キー: 年齢, 値: 25
キー: 名前, 値: 田中太郎

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:連想配列$personを初期化し、「名前」「年齢」「職業」のキーとそれぞれの値を設定
2:「配列の内容を表示します。」と出力
3:array_keys関数を使用して配列$personのキーを取得し、変数$keysに代入
4:forループを使用して$keysの要素数分だけ繰り返し処理を行う
  □ 現在のキーを$keys[$i]として取得し、変数$keyに代入
  □ $keyを使用して配列$personから対応する値を取得し、変数$valueに代入
  □ 「キー: $key, 値: $value」と出力
5:implode関数を使用して$keysの要素を文字列として結合し、「配列のキー一覧: 」と出力
6:array_values関数を使用して配列$personの値を取得し、変数$valuesに代入
7:implode関数を使用して$valuesの要素を文字列として結合し、「配列の値一覧: 」と出力
8:ksort関数を使用して配列$personをキーで昇順にソート
9:「キーで昇順ソートした結果:」と出力
10:array_keys関数を再度使用してソート後の$personのキーを取得し、forループで処理を行う
  □ 現在のキーを$keys[$i]として取得し、変数$keyに代入
  □ $keyを使用して配列$personから対応する値を取得し、変数$valueに代入
  □ 「キー: $key, 値: $value」と出力
11:krsort関数を使用して配列$personをキーで降順にソート
12:「キーで降順ソートした結果:」と出力
13:array_keys関数を再度使用してソート後の$personのキーを取得し、forループで処理を行う
  □ 現在のキーを$keys[$i]として取得し、変数$keyに代入
  □ $keyを使用して配列$personから対応する値を取得し、変数$valueに代入
  □ 「キー: $key, 値: $value」と出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

<?php
// キーが文字列の配列を作成します。
/*
【穴埋め問題1】
ここに連想配列を初期化して、キーが「名前」「年齢」「職業」でそれぞれの値を設定するコードを書いてください。
*/

// 配列の内容を表示します。
echo "配列の内容を表示します。" . PHP_EOL;
/*
【穴埋め問題2】
ここにarray_keys関数を使って配列のキーを取得し、変数$keysに代入するコードを書いてください。
*/
for ($i = 0; $i < count($keys); $i++) {
    $key = $keys[$i]; // 現在のキー
    $value = $person[$key]; // キーに対応する値
    echo "キー: $key, 値: $value" . PHP_EOL;
}

// キーの一覧を表示します。
echo "配列のキー一覧: " . implode(", ", $keys) . PHP_EOL;

// 値の一覧を取得して表示します。
/*
【穴埋め問題3】
ここにarray_values関数を使って配列の値を取得し、変数$valuesに代入するコードを書いてください。
*/
echo "配列の値一覧: " . implode(", ", $values) . PHP_EOL;

// 配列をキーで昇順ソートします。
/*
【穴埋め問題4】
ここにksort関数を使って配列をキーで昇順に並べ替えるコードを書いてください。
*/
echo "キーで昇順ソートした結果:" . PHP_EOL;
$keys = array_keys($person); // ソート後のキーを再取得します。
for ($i = 0; $i < count($keys); $i++) {
    $key = $keys[$i];
    $value = $person[$key];
    echo "キー: $key, 値: $value" . PHP_EOL;
}

// 配列をキーで降順ソートします。
/*
【穴埋め問題5】
ここにkrsort関数を使って配列をキーで降順に並べ替えるコードを書いてください。
*/
echo "キーで降順ソートした結果:" . PHP_EOL;
$keys = array_keys($person); // ソート後のキーを再取得します。
for ($i = 0; $i < count($keys); $i++) {
    $key = $keys[$i];
    $value = $person[$key];
    echo "キー: $key, 値: $value" . PHP_EOL;
}

以上がこの問題の穴埋めコードです。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



練習問題の解答と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

<?php
// キーが文字列の配列を作成します。
$person = [
    "名前" => "田中太郎",
    "年齢" => 25,
    "職業" => "エンジニア"
];

// 配列の内容を表示します。
echo "配列の内容を表示します。" . PHP_EOL;
$keys = array_keys($person); // 配列のキーを取得します。
for ($i = 0; $i < count($keys); $i++) {
    $key = $keys[$i]; // 現在のキー
    $value = $person[$key]; // キーに対応する値
    echo "キー: $key, 値: $value" . PHP_EOL;
}

// キーの一覧を表示します。
echo "配列のキー一覧: " . implode(", ", $keys) . PHP_EOL;

// 値の一覧を取得して表示します。
$values = array_values($person); // 配列の値を取得します。
echo "配列の値一覧: " . implode(", ", $values) . PHP_EOL;

// 配列をキーで昇順ソートします。
ksort($person); // ksort()は配列をキーで昇順に並べ替えます。
echo "キーで昇順ソートした結果:" . PHP_EOL;
$keys = array_keys($person); // ソート後のキーを再取得します。
for ($i = 0; $i < count($keys); $i++) {
    $key = $keys[$i];
    $value = $person[$key];
    echo "キー: $key, 値: $value" . PHP_EOL;
}

// 配列をキーで降順ソートします。
krsort($person); // krsort()は配列をキーで降順に並べ替えます。
echo "キーで降順ソートした結果:" . PHP_EOL;
$keys = array_keys($person); // ソート後のキーを再取得します。
for ($i = 0; $i < count($keys); $i++) {
    $key = $keys[$i];
    $value = $person[$key];
    echo "キー: $key, 値: $value" . PHP_EOL;
}

正解コードの解説

このコードはキーが文字列の配列を扱う方法を学ぶためのものです。

キーが文字列の配列は名前付きのデータを格納するために非常に便利です。

以下、コードをブロックごとに分けて解説します。

配列の作成

$person = [
    "名前" => "田中太郎",
    "年齢" => 25,
    "職業" => "エンジニア"
];
  1. 説明: ここでは、キーが文字列(「名前」「年齢」「職業」)の配列 $person を作成しています。
  2. ポイント:
    • 配列のキーが文字列である場合、名前付きデータを扱いやすくなります。
    • 値はそれぞれ文字列や数値を格納可能です。

配列の内容を表示

echo "配列の内容を表示します。" . PHP_EOL;
$keys = array_keys($person);
for ($i = 0; $i < count($keys); $i++) {
    $key = $keys[$i];
    $value = $person[$key];
    echo "キー: $key, 値: $value" . PHP_EOL;
}
  1. 説明:
    • 配列 $person の全てのキーを array_keys() 関数で取得します。
    • for ループを使って各キーと値を取り出し表示します。
  2. ポイント:
    • array_keys() は、配列から全てのキーを取得するPHPのビルトイン関数です。
    • count() を使って配列の長さを取得し、ループの終了条件を設定しています。

配列のキー一覧と値一覧の取得

$keys = array_keys($person);
echo "配列のキー一覧: " . implode(", ", $keys) . PHP_EOL;

$values = array_values($person);
echo "配列の値一覧: " . implode(", ", $values) . PHP_EOL;
  1. 説明:
    • array_keys() でキー一覧、array_values() で値一覧を取得しています。
    • implode() 関数で配列を文字列に変換し、カンマ区切りで出力します。
  2. ポイント:
    • implode() は配列を文字列として結合する関数で、見やすい形式でデータを表示できます。

配列をキーで昇順ソート

ksort($person);
echo "キーで昇順ソートした結果:" . PHP_EOL;
$keys = array_keys($person);
for ($i = 0; $i < count($keys); $i++) {
    $key = $keys[$i];
    $value = $person[$key];
    echo "キー: $key, 値: $value" . PHP_EOL;
}
  1. 説明:
    • ksort() 関数を使って、キーを昇順(アルファベット順)に並び替えます。
    • ソート後のキーと値を再度ループで表示しています。
  2. ポイント:
    • ksort() はキーの並び順を変更しますが、値の関連付けは保持されます。

配列をキーで降順ソート

krsort($person);
echo "キーで降順ソートした結果:" . PHP_EOL;
$keys = array_keys($person);
for ($i = 0; $i < count($keys); $i++) {
    $key = $keys[$i];
    $value = $person[$key];
    echo "キー: $key, 値: $value" . PHP_EOL;
}
  1. 説明:
    • krsort() 関数で、キーを降順(逆アルファベット順)に並び替えます。
    • 再度ソート後の配列を出力しています。
  2. ポイント:
    • krsort() は逆順でキーを並べ替えるため、結果の確認やデータの並び替えに便利です。

まとめ

このコードではキーが文字列の配列を作成し、データの表示、キーと値の一覧取得、キーでのソート方法を学びました。

  1. キーが文字列の配列: 名前付きデータを管理するのに適しています。
  2. PHPビルトイン関数:
    • array_keys()array_values() で配列データを簡単に取得できます。
    • ksort()krsort() でキーの並び順を自由に変更できます。

これらの操作を理解することでPHPで効率よく配列を扱えるようになります。

今回学んだ内容を応用して、他のシナリオでも配列を活用してみてください!

<<前のページ PHP記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    PHPのテキスト&問題集トップへ戻る
    トップページへ戻る