بخش دهم: تمرین‌های جامع همراه با پاسخ

۱۰-۱. تمرین‌های بخش آرایه اندیس‌دار

تمرین ۱

آرایه‌ای با نام $numbers شامل اعداد 5، 10، 15، 20 بسازید. سپس مقدار عنصر دوم را به 12 تغییر دهید و عنصر چهارم را حذف کنید. در پایان آرایه را نمایش دهید.

پاسخ:

<?php
$numbers = [5, 10, 15, 20];
$numbers[1] = 12;
unset($numbers[3]);

print_r($numbers);
?>

تمرین ۲

آرایه‌ای از نام پنج میوه بسازید و با حلقه for همه آن‌ها را چاپ کنید.

پاسخ:

<?php
$fruits = ["سیب", "پرتقال", "انگور", "موز", "هلو"];

for ($i = 0; $i < count($fruits); $i++) {
    echo $fruits[$i] . "<br>";
}
?>

تمرین ۳

آرایه‌ای از اعداد بسازید و مجموع آن‌ها را با حلقه foreach محاسبه کنید.

پاسخ:

<?php
$numbers = [3, 7, 2, 9, 5];
$sum = 0;

foreach ($numbers as $number) {
    $sum += $number;
}

echo "مجموع: " . $sum;
?>

۱۰-۲. تمرین‌های بخش آرایه انجمنی

تمرین ۴

آرایه انجمنی برای اطلاعات یک کتاب با کلیدهای title، author و price بسازید و همه را چاپ کنید.

پاسخ:

<?php
$book = [
    "title"  => "برنامه‌نویسی PHP",
    "author" => "احمدی",
    "price"  => 250000
];

foreach ($book as $key => $value) {
    echo $key . " : " . $value . "<br>";
}
?>

تمرین ۵

آرایه انجمنی از نمرات دانش‌آموزان بسازید (کلید: نام، مقدار: نمره). سپس میانگین نمرات را محاسبه کنید.

پاسخ:

<?php
$scores = [
    "علی"  => 18,
    "رضا"  => 15,
    "مریم" => 20,
    "سارا" => 17
];

$sum = array_sum($scores);
$avg = $sum / count($scores);

echo "میانگین: " . $avg;
?>

۱۰-۳. تمرین‌های بخش آرایه چندبعدی

تمرین ۶

آرایه دوبعدی از سه دانش‌آموز با نام و سن بسازید و با دو حلقه تودرتو نمایش دهید.

پاسخ:

<?php
$students = [
    ["علی", 17],
    ["رضا", 18],
    ["مریم", 16]
];

foreach ($students as $row) {
    foreach ($row as $value) {
        echo $value . " | ";
    }
    echo "<br>";
}
?>

تمرین ۷

آرایه دوبعدی از کالاها با کلیدهای name و price بسازید و کالاهایی که قیمتشان کمتر از 300000 است را نمایش دهید.

پاسخ:

<?php
$products = [
    ["name" => "کیبورد", "price" => 450000],
    ["name" => "ماوس", "price" => 250000],
    ["name" => "فلش", "price" => 150000]
];

foreach ($products as $product) {
    if ($product["price"] < 300000) {
        echo $product["name"] . " : " . $product["price"] . "<br>";
    }
}
?>

۱۰-۴. تمرین‌های بخش پیمایش

تمرین ۸

آرایه‌ای از اعداد بسازید و با foreach فقط اعداد زوج را چاپ کنید.

پاسخ:

<?php
$numbers = [1, 2, 3, 4, 5, 6, 7, 8];

foreach ($numbers as $number) {
    if ($number % 2 == 0) {
        echo $number . "<br>";
    }
}
?>

تمرین ۹

آرایه‌ای از نام‌ها بسازید و با foreach نام‌ها را به حروف بزرگ تبدیل کنید.

پاسخ:

<?php
$names = ["ali", "reza", "maryam"];

foreach ($names as &$name) {
    $name = strtoupper($name);
}
unset($name);

print_r($names);
?>

۱۰-۵. تمرین‌های بخش توابع

تمرین ۱۰

آرایه‌ای از اعداد بسازید و با array_filter فقط اعداد بزرگ‌تر از 10 را نگه دارید.

پاسخ:

<?php
$numbers = [5, 12, 8, 20, 3, 15];

$result = array_filter($numbers, function ($n) {
    return $n > 10;
});

print_r(array_values($result));
?>

تمرین ۱۱

آرایه‌ای از نام کالاها و قیمت‌ها بسازید و با array_map قیمت‌ها را 10 درصد افزایش دهید.

پاسخ:

<?php
$prices = [100000, 200000, 300000];

$newPrices = array_map(function ($p) {
    return $p * 1.10;
}, $prices);

print_r($newPrices);
?>

تمرین ۱۲

آرایه‌ای از اعداد بسازید و با array_reduce حاصل‌ضرب آن‌ها را محاسبه کنید.

پاسخ:

<?php
$numbers = [2, 3, 4, 5];

$product = array_reduce($numbers, function ($carry, $item) {
    return $carry * $item;
}, 1);

echo $product; // 120
?>

۱۰-۶. تمرین‌های بخش مرتب‌سازی

تمرین ۱۳

آرایه‌ای از نمرات بسازید و آن را به‌صورت نزولی مرتب کنید.

پاسخ:

<?php
$scores = [18, 15, 20, 12, 17];

rsort($scores);
print_r($scores);
?>

تمرین ۱۴

آرایه انجمنی از نام و سن بسازید و بر اساس سن به‌صورت صعودی مرتب کنید، به‌طوری که نام‌ها حفظ شوند.

پاسخ:

<?php
$ages = [
    "علی"  => 17,
    "رضا"  => 20,
    "مریم" => 16
];

asort($ages);
print_r($ages);
?>

تمرین ۱۵

آرایه دوبعدی از کالاها بسازید و بر اساس قیمت به‌صورت نزولی مرتب کنید.

پاسخ:

<?php
$products = [
    ["name" => "کیبورد", "price" => 450000],
    ["name" => "ماوس", "price" => 250000],
    ["name" => "مانیتور", "price" => 3500000]
];

usort($products, function ($a, $b) {
    return $b["price"] <=> $a["price"];
});

print_r($products);
?>

۱۰-۷. تمرین‌های ترکیبی

تمرین ۱۶

آرایه‌ای از دانش‌آموزان با نام، سن و نمره بسازید. سپس:

  1. دانش‌آموزان با نمره بالای 17 را فیلتر کنید.
  2. آن‌ها را بر اساس نمره نزولی مرتب کنید.
  3. میانگین نمرات آن‌ها را محاسبه کنید.

پاسخ:

<?php
$students = [
    ["name" => "علی", "age" => 17, "score" => 18],
    ["name" => "رضا", "age" => 20, "score" => 15],
    ["name" => "مریم", "age" => 16, "score" => 20],
    ["name" => "سارا", "age" => 18, "score" => 19]
];

$filtered = array_filter($students, function ($s) {
    return $s["score"] > 17;
});

usort($filtered, function ($a, $b) {
    return $b["score"] <=> $a["score"];
});

$sum = array_sum(array_column($filtered, "score"));
$avg = $sum / count($filtered);

echo "میانگین: " . $avg . "<br>";

foreach ($filtered as $student) {
    echo $student["name"] . " : " . $student["score"] . "<br>";
}
?>

تمرین ۱۷

آرایه‌ای از کلمات بسازید و:

  1. کلمات تکراری را حذف کنید.
  2. آن‌ها را بر اساس طول مرتب کنید.
  3. هر کلمه را با تعداد حروفش نمایش دهید.

پاسخ:

<?php
$words = ["سیب", "پرتقال", "انگور", "سیب", "موز"];

$unique = array_values(array_unique($words));

usort($unique, function ($a, $b) {
    return strlen($a) <=> strlen($b);
});

foreach ($unique as $word) {
    echo $word . " : " . strlen($word) . " حرف<br>";
}
?>

۱۰-۸. تمرین‌های پیشرفته (مطالعه تکمیلی)

تمرین ۱۸

یک آرایه دوبعدی از فروش ماهانه بسازید (ماه و مبلغ). سپس:

  1. جمع فروش هر فصل را محاسبه کنید.
  2. میانگین فروش ماهانه را محاسبه کنید.

پاسخ:

<?php
$sales = [
    ["month" => 1, "amount" => 1000],
    ["month" => 2, "amount" => 2000],
    ["month" => 3, "amount" => 1500],
    ["month" => 4, "amount" => 3000],
    ["month" => 5, "amount" => 2500],
    ["month" => 6, "amount" => 1800]
];

$seasons = [
    "بهار"   => [1, 2, 3],
    "تابستان" => [4, 5, 6]
];

foreach ($seasons as $season => $months) {
    $total = 0;
    foreach ($sales as $sale) {
        if (in_array($sale["month"], $months)) {
            $total += $sale["amount"];
        }
    }
    echo $season . " : " . $total . "<br>";
}

$avg = array_sum(array_column($sales, "amount")) / count($sales);
echo "میانگین ماهانه: " . $avg;
?>

تمرین ۱۹

یک آرایه از شماره دانشجویی و نمرات چند درس بسازید. سپس برای هر دانشجو معدل را محاسبه کنید و مرتب‌شده بر اساس معدل نمایش دهید.

پاسخ:

<?php
$students = [
    ["id" => 1, "grades" => [18, 17, 19]],
    ["id" => 2, "grades" => [15, 16, 14]],
    ["id" => 3, "grades" => [20, 19, 18]]
];

foreach ($students as &$student) {
    $student["avg"] = array_sum($student["grades"]) / count($student["grades"]);
}
unset($student);

usort($students, function ($a, $b) {
    return $b["avg"] <=> $a["avg"];
});

foreach ($students as $student) {
    echo "دانشجو " . $student["id"] . " - معدل: " . round($student["avg"], 2) . "<br>";
}
?>

مطالعه تکمیلی: تابع round برای گرد کردن اعداد اعشاری استفاده می‌شود. پارامتر دوم تعداد رقم‌های اعشار را تعیین می‌کند.

۱۰-۹. نکات پایانی جزوه

  1. آرایه‌ها ابزار اصلی نگهداری داده‌های مرتبط در PHP هستند.
  2. سه نوع آرایه اصلی داریم: اندیس‌دار، انجمنی و چندبعدی.
  3. برای پیمایش، foreach ساده‌ترین و مطمئن‌ترین روش است.
  4. توابع آماده آرایه، کد را کوتاه‌تر و خواناتر می‌کنند.
  5. برای مرتب‌سازی، بر اساس نیاز از sort، asort، ksort یا usort استفاده کنید.
  6. آرایه‌های فوق‌سراسری برای دریافت داده از کاربر و محیط کاربرد دارند.
  7. همیشه داده‌های ورودی را بررسی و پاک‌سازی کنید.
  8. تمرین و تکرار، بهترین راه تسلط بر آرایه‌هاست.

این جزوه در ده بخش ارائه شد و شامل مفاهیم پایه، انواع آرایه، پیمایش، توابع پرکاربرد، مرتب‌سازی، آرایه‌های فوق‌سراسری و تمرین‌های جامع است. برای تسلط بیشتر، توصیه می‌شود تمرین‌ها را بدون نگاه کردن به پاسخ‌ها حل کنید و سپس نتیجه را با پاسخ مقایسه کنید.