Menu
CoddyTech

גישה לערכים לפי מפתח

חלק מהיחידה יסודות במסלול ה-PHP של Coddy. שיעור 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
?>

המפתח חייב להתאים בדיוק, כולל אותיות גדולות וקטנות. שימוש ב־"Name" במקום "name" מתייחס למפתח אחר; PHP מציגה אזהרת "Undefined array key" והביטוי מוערך ל־null (היא לא קורסת).

לפעמים נתונים מגיעים כמחרוזת JSON במקום כליטרל של מערך PHP. ‏JSON (סימון אובייקטים של JavaScript) הוא פורמט טקסט נפוץ לייצוג נתונים מובנים. לדוגמה:

$json = '{"title": "Dune", "author": "Frank Herbert", "year": 1965}';

הפונקציה המובנית json_decode() של PHP ממירה מחרוזת JSON לערך PHP. כדי לקבל מערך אסוציאטיבי, העבירו 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"].

challenge icon

אתגר

קל

קראו שורת קלט המכילה אובייקט JSON שמייצג מידע על ספר (לדוגמה, {"title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "year": 1925}).

לאחר מכן קראו שתי קלטים נוספים:

  • מחרוזת key1 שמייצגת את המפתח הראשון שיש לגשת אליו
  • מחרוזת key2 שמייצגת את המפתח השני שיש לגשת אליו

כדי להמיר את מחרוזת ה-JSON למערך אסוציאטיבי, השתמשו בפונקציה המובנית json_decode() עם true כארגומנט השני:
$array = json_decode($jsonString, true);
הארגומנט השני true מורה ל-PHP להחזיר מערך אסוציאטיבי במקום אובייקט. לאחר הפענוח, אפשר לגשת לערכים לפי מפתח, בדיוק כמו בכל מערך אסוציאטיבי, לדוגמה $array["title"].

צרו מערך אסוציאטיבי מקלט ה-JSON, ואז:

  1. גשו לערך המשויך ל-key1 והדפיסו אותו
  2. שמרו את הערך המשויך ל-key2 במשתנה בשם $info
  3. הדפיסו את הערך השמור ב-$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));

// קראו את שני המפתחות
$key1 = trim(fgets(STDIN));
$key2 = trim(fgets(STDIN));

// TODO: כתבו את הקוד שלכם למטה
// 1. צרו מערך אסוציאטיבי מקלט ה-JSON באמצעות json_decode
// 2. גשו לערך המשויך ל-$key1 והדפיסו אותו
// 3. שמרו את הערך המשויך ל-$key2 במשתנה בשם $info
// 4. הדפיסו את הערך השמור ב-$info

?>
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר PHP אונליין