Accessing Values by Key
CoddyのPHPジャーニー「基礎」セクションの一部 — レッスン 42/71。
連想配列が何であるかを理解したところで、それらから値を取得する方法を学びましょう。インデックス配列が数値の位置を使用するのと同様に、連想配列は角括弧の中でキーを使用します。
<?php
$person = [
"name" => "Alice",
"age" => 25,
"city" => "Paris"
];
echo $person["name"]; // Alice
echo $person["age"]; // 25
?>構文は $array["key"] です。ブラケットの中にキーを文字列として配置すると、PHPが関連付けられた値を返します。これは、名前がインデックス0にあることを覚えているよりも、はるかに読みやすいです。
取得した値を後で使用するために変数に保存することもできます:
<?php
$product = [
"title" => "Laptop",
"price" => 999
];
$itemName = $product["title"];
echo $itemName; // Laptop
?>キーは、大文字と小文字を含めて正確に一致させる必要があります。PHPはこれらを異なるキーとして扱うため、"name" の代わりに "Name" を使用するとエラーが発生します。
時には、データがPHPの配列リテラルではなく、JSON文字列として届くことがあります。JSON (JavaScript Object Notation) は、構造化データを表現するための一般的なテキスト形式です。例えば:
$json = '{"title": "Dune", "author": "Frank Herbert", "year": 1965}';PHPの組み込み json_decode() 関数は、JSON文字列をPHPの値に変換します。連想配列を取得するには、第2引数に true を渡します:
<?php
$json = '{"title": "Dune", "author": "Frank Herbert", "year": 1965}';
$book = json_decode($json, true);
echo $book["title"]; // Dune
echo $book["author"]; // Frank Herbert
echo $book["year"]; // 1965
?>json_decode($json, true) を呼び出した後、その結果は通常の連想配列になります。そのため、他の連想配列とまったく同じように、$array["key"] を使ってその値にアクセスできます。
チャレンジ
簡単本の情報を表すJSONオブジェクト(例:{"title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "year": 1925})を含む1行の入力を読み取ります。
次に、さらに2つの入力を読み取ります:
- アクセスする最初のキーを表す文字列
key1 - アクセスする2番目のキーを表す文字列
key2
JSON文字列を連想配列に変換するには、第2引数に true を指定して組み込みの json_decode() 関数を使用します:
$array = json_decode($jsonString, true);
第2引数の true は、PHPにオブジェクトではなく連想配列を返すように指示します。デコードされると、$array["title"] のように、通常の連想配列と同じようにキーで値にアクセスできます。
JSON入力から連想配列を作成し、以下の操作を行ってください:
key1に関連付けられた値にアクセスして表示するkey2に関連付けられた値を$infoという名前の変数に格納する$infoに格納されている値を表示する
各結果を個別の行に表示してください。
例:
入力が {"title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "year": 1925}、title、author の場合、出力は以下のようになります:
The Great Gatsby
F. Scott Fitzgerald入力が {"name": "Laptop", "brand": "TechCo", "price": 999}、brand、price の場合、出力は以下のようになります:
TechCo
999自分で試してみよう
<?php
// JSON入力を読み込む
$jsonInput = trim(fgets(STDIN));
// 2つのキーを読み込む
$key1 = trim(fgets(STDIN));
$key2 = trim(fgets(STDIN));
// TODO: 以下にコードを記述してください
// 1. json_decode を使用して、JSON入力から連想配列を作成する
// 2. $key1 に関連付けられた値にアクセスして表示する
// 3. $key2 に関連付けられた値を $info という変数に格納する
// 4. $info に格納された値を表示する
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Comparison & Logical Operators
Comparison OperatorsEquality & IdentityLogical Operators Part 1Logical Operators Part 2Recap - Simple Logic7Arrays Part 2 - Associative
Intro to Associative ArraysAccessing Values by KeyModifying Values by KeyAdding New Key-Value PairsCheck if Key ExistsRecap - Key-Value Data Store2Variables and Data Types
NumbersStrings and QuotesBooleansNaming ConventionsRecap - Variable InitEmpty VariablesString ConcatenationGetting User InputCast to Different Types3Basic Operators
Arithmetic OperatorsModulo OperatorExponentiation OperatorCombined AssignmentIncrement/DecrementOperator PrecedenceRecap - Simple CalculationsString Operators