بخش دهم: تمرینهای جامع همراه با پاسخ
۱۰-۱. تمرینهای بخش آرایه اندیسدار
تمرین ۱
آرایهای با نام $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);
?>
۱۰-۷. تمرینهای ترکیبی
تمرین ۱۶
آرایهای از دانشآموزان با نام، سن و نمره بسازید. سپس:
- دانشآموزان با نمره بالای 17 را فیلتر کنید.
- آنها را بر اساس نمره نزولی مرتب کنید.
- میانگین نمرات آنها را محاسبه کنید.
پاسخ:
<?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>";
}
?>
تمرین ۱۷
آرایهای از کلمات بسازید و:
- کلمات تکراری را حذف کنید.
- آنها را بر اساس طول مرتب کنید.
- هر کلمه را با تعداد حروفش نمایش دهید.
پاسخ:
<?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>";
}
?>
۱۰-۸. تمرینهای پیشرفته (مطالعه تکمیلی)
تمرین ۱۸
یک آرایه دوبعدی از فروش ماهانه بسازید (ماه و مبلغ). سپس:
- جمع فروش هر فصل را محاسبه کنید.
- میانگین فروش ماهانه را محاسبه کنید.
پاسخ:
<?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برای گرد کردن اعداد اعشاری استفاده میشود. پارامتر دوم تعداد رقمهای اعشار را تعیین میکند.
۱۰-۹. نکات پایانی جزوه
- آرایهها ابزار اصلی نگهداری دادههای مرتبط در PHP هستند.
- سه نوع آرایه اصلی داریم: اندیسدار، انجمنی و چندبعدی.
- برای پیمایش،
foreachسادهترین و مطمئنترین روش است. - توابع آماده آرایه، کد را کوتاهتر و خواناتر میکنند.
- برای مرتبسازی، بر اساس نیاز از
sort،asort،ksortیاusortاستفاده کنید. - آرایههای فوقسراسری برای دریافت داده از کاربر و محیط کاربرد دارند.
- همیشه دادههای ورودی را بررسی و پاکسازی کنید.
- تمرین و تکرار، بهترین راه تسلط بر آرایههاست.
این جزوه در ده بخش ارائه شد و شامل مفاهیم پایه، انواع آرایه، پیمایش، توابع پرکاربرد، مرتبسازی، آرایههای فوقسراسری و تمرینهای جامع است. برای تسلط بیشتر، توصیه میشود تمرینها را بدون نگاه کردن به پاسخها حل کنید و سپس نتیجه را با پاسخ مقایسه کنید.