Thời gian đọc: 28 phút
Mảng (array) là một trong những cấu trúc dữ liệu cơ bản và quan trọng trong PHP. Đối với những lập trình viên, việc hiểu và làm chủ các thao tác với mảng không chỉ giúp cải thiện khả năng viết mã mà còn giúp giải quyết các vấn đề phức tạp trong phát triển ứng dụng. Bộ bài tập này được thiết kế để hướng dẫn bạn từ các thao tác cơ bản như tạo mảng, thêm và xóa phần tử, đến các kỹ thuật nâng cao như lọc dữ liệu, sắp xếp, và kết hợp mảng.
Từ việc tìm kiếm các phần tử trong mảng, phân chia mảng thành các phần nhỏ hơn, đến việc xử lý các giá trị và khóa của mảng liên kết, bài tập này sẽ cung cấp cho bạn những kiến thức và kỹ năng cần thiết để làm việc hiệu quả với mảng trong PHP. Các bài tập được trình bày chi tiết và dễ hiểu, giúp bạn áp dụng lý thuyết vào thực hành một cách trực quan và hiệu quả. Hãy cùng bắt đầu hành trình làm chủ mảng trong PHP với những bài tập thực hành này!
Yêu Cầu:
Giải Thích: Mảng trong PHP có thể chứa nhiều phần tử, và chúng ta có thể sử dụng hàm print_r
để in ra cấu trúc của mảng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// In mảng
print_r($numbers);
Yêu Cầu:
Giải Thích: Hàm count
được sử dụng để đếm số lượng phần tử trong mảng.
// Tạo mảng chuỗi
$fruits = array("apple", "banana", "cherry");
// Đếm số lượng phần tử
$count = count($fruits);
// In số lượng phần tử
echo "Number of fruits: " . $count;
Yêu Cầu:
Giải Thích: Hàm array_push
được sử dụng để thêm một hoặc nhiều phần tử vào cuối mảng.
// Tạo mảng rỗng
$numbers = array();
// Thêm các số nguyên vào mảng
array_push($numbers, 1);
array_push($numbers, 2);
array_push($numbers, 3);
// In mảng
print_r($numbers);
Yêu Cầu:
Giải Thích: Hàm unset
được sử dụng để xóa phần tử tại một chỉ số cụ thể. Sau khi xóa, cần sử dụng array_values
để reindex mảng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Xóa phần tử tại chỉ số 2
unset($numbers[2]);
// Reindex mảng
$numbers = array_values($numbers);
// In mảng
print_r($numbers);
Yêu Cầu:
Giải Thích: Hàm sort
được sử dụng để sắp xếp mảng theo thứ tự tăng dần.
// Tạo mảng số nguyên không theo thứ tự
$numbers = array(5, 2, 9, 1, 5, 6);
// Sắp xếp mảng theo thứ tự tăng dần
sort($numbers);
// In mảng sau khi sắp xếp
print_r($numbers);
Yêu Cầu:
Giải Thích: Hàm rsort
được sử dụng để sắp xếp mảng theo thứ tự giảm dần.
// Tạo mảng số nguyên không theo thứ tự
$numbers = array(5, 2, 9, 1, 5, 6);
// Sắp xếp mảng theo thứ tự giảm dần
rsort($numbers);
// In mảng sau khi sắp xếp
print_r($numbers);
Yêu Cầu:
Giải Thích: Hàm array_shift
được sử dụng để xóa phần tử đầu tiên, và hàm array_pop
được sử dụng để xóa phần tử cuối cùng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Xóa phần tử đầu tiên
array_shift($numbers);
// Xóa phần tử cuối cùng
array_pop($numbers);
// In mảng sau khi xóa các phần tử
print_r($numbers);
Yêu Cầu:
Giải Thích: Hàm array_merge
được sử dụng để ghép hai hoặc nhiều mảng.
// Tạo hai mảng số nguyên
$array1 = array(1, 2, 3);
$array2 = array(4, 5, 6);
// Ghép hai mảng
$merged_array = array_merge($array1, $array2);
// In mảng kết quả
print_r($merged_array);
Yêu Cầu:
Giải Thích: Hàm in_array
được sử dụng để kiểm tra xem một giá trị có tồn tại trong mảng hay không.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Kiểm tra số 3 có tồn tại trong mảng không
$exists = in_array(3, $numbers);
// In kết quả kiểm tra
if ($exists) {
echo "Number 3 exists in the array.";
} else {
echo "Number 3 does not exist in the array.";
}
Yêu Cầu:
Giải Thích: Hàm max
và min
được sử dụng để tìm giá trị tối đa và tối thiểu trong mảng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Tìm giá trị tối đa
$max_value = max($numbers);
// Tìm giá trị tối thiểu
$min_value = min($numbers);
// In các giá trị tối đa và tối thiểu
echo "Max value: " . $max_value . "n";
echo "Min value: " . $min_value . "n";
Yêu Cầu:
Giải Thích: Hàm array_sum
được sử dụng để tính tổng các phần tử trong mảng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Tính tổng các phần tử
$total = array_sum($numbers);
// In tổng
echo "Total sum: " . $total . "n";
Yêu Cầu:
Giải Thích: Mảng liên kết cho phép sử dụng các khóa tùy chỉnh thay vì chỉ số số nguyên.
// Tạo mảng liên kết
$person = array(
"name" => "John",
"age" => 30,
"city" => "New York"
);
// In mảng liên kết
print_r($person);
Yêu Cầu:
Giải Thích: Bạn có thể thay đổi giá trị của một khóa bằng cách gán giá trị mới cho khóa đó.
// Tạo mảng liên kết
$person = array(
"name" => "John",
"age" => 30,
"city" => "New York"
);
// Thay đổi giá trị của khóa 'city'
$person["city"] = "Los Angeles";
// In mảng liên kết sau khi thay đổi
print_r($person);
Yêu Cầu:
Giải Thích: Hàm unset
được sử dụng để xóa một phần tử khỏi mảng liên kết bằng cách chỉ định khóa của phần tử đó.
// Tạo mảng liên kết
$person = array(
"name" => "John",
"age" => 30,
"city" => "New York"
);
// Xóa khóa 'age'
unset($person["age"]);
// In mảng liên kết sau khi xóa
print_r($person);
Yêu Cầu:
Giải Thích: Bạn có thể sử dụng vòng lặp foreach
để lặp qua mảng liên kết.
// Tạo mảng liên kết
$person = array(
"name" => "John",
"age" => 30,
"city" => "New York"
);
// Lặp qua mảng và in các khóa và giá trị
foreach ($person as $key => $value) {
echo $key . ": " . $value . "n";
}
Yêu Cầu:
Giải Thích: Sử dụng vòng lặp để phân loại các phần tử thành các nhóm dựa trên điều kiện.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Nhóm các phần tử thành số chẵn và số lẻ
$even_numbers = array();
$odd_numbers = array();
foreach ($numbers as $number) {
if ($number % 2 == 0) {
$even_numbers[] = $number;
} else {
$odd_numbers[] = $number;
}
}
// In các mảng đã nhóm
echo "Even numbers: ";
print_r($even_numbers);
echo "Odd numbers: ";
print_r($odd_numbers);
Yêu Cầu:
Giải Thích: Hàm explode
được sử dụng để chia một chuỗi thành mảng dựa trên dấu phân cách.
// Tạo chuỗi các từ ngăn cách bởi dấu phẩy
$string = "apple,banana,cherry";
// Chia chuỗi thành mảng các từ
$words = explode(",", $string);
// In mảng các từ
print_r($words);
Yêu Cầu:
Giải Thích: Hàm implode
được sử dụng để kết hợp các phần tử của mảng thành một chuỗi.
// Tạo mảng các từ
$words = array("apple", "banana", "cherry");
// Chuyển đổi mảng thành chuỗi
$string = implode(" ", $words);
// In chuỗi
echo $string;
Yêu Cầu:
Giải Thích: Hàm array_filter
được sử dụng để lọc mảng theo một điều kiện cho trước.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Lọc các số lớn hơn 5
$filtered_numbers = array_filter($numbers, function($number) {
return $number > 5;
});
// In mảng sau khi lọc
print_r($filtered_numbers);
Yêu Cầu:
Giải Thích: Hàm array_map
được sử dụng để áp dụng một hàm cho mỗi phần tử của mảng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Chuyển đổi mỗi số thành bình phương của nó
$squared_numbers = array_map(function($number) {
return $number * $number;
}, $numbers);
// In mảng sau khi chuyển đổi
print_r($squared_numbers);
Yêu Cầu:
Giải Thích: Hàm ksort
được sử dụng để sắp xếp mảng liên kết theo khóa.
// Tạo mảng liên kết
$person = array(
"name" => "John",
"age" => 30,
"city" => "New York"
);
// Sắp xếp mảng theo khóa
ksort($person);
// In mảng liên kết sau khi sắp xếp
print_r($person);
Yêu Cầu:
Giải Thích: Hàm asort
được sử dụng để sắp xếp mảng liên kết theo giá trị và duy trì mối liên hệ giữa khóa và giá trị.
// Tạo mảng liên kết
$person = array(
"name" => "John",
"age" => 30,
"city" => "New York"
);
// Sắp xếp mảng theo giá trị
asort($person);
// In mảng liên kết sau khi sắp xếp
print_r($person);
Yêu Cầu:
Giải Thích: Bạn có thể tạo các đối tượng từ một lớp và lưu chúng trong mảng.
// Định nghĩa lớp Person
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
// Tạo mảng chứa các đối tượng
$people = array(
new Person("John", 30),
new Person("Jane", 25)
);
// In các đối tượng
foreach ($people as $person) {
echo "Name: " . $person->name . ", Age: " . $person->age . "n";
}
Yêu Cầu:
Giải Thích: Sử dụng vòng lặp để tìm đối tượng trong mảng dựa trên thuộc tính cụ thể.
// Định nghĩa lớp Person
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
// Tạo mảng chứa các đối tượng
$people = array(
new Person("John", 30),
new Person("Jane", 25)
);
// Tìm đối tượng với tên 'Jane'
$found = null;
foreach ($people as $person) {
if ($person->name == "Jane") {
$found = $person;
break;
}
}
// In kết quả tìm kiếm
if ($found) {
echo "Found: Name: " . $found->name . ", Age: " . $found->age . "n";
} else {
echo "Person not found.n";
}
Yêu Cầu:
Giải Thích: Sử dụng hàm array_merge
để kết hợp các mảng chứa đối tượng.
// Định nghĩa lớp Person
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
// Tạo hai mảng chứa các đối tượng
$group1 = array(
new Person("John", 30),
new Person("Jane", 25)
);
$group2 = array(
new Person("Mike", 40),
new Person("Anna", 22)
);
// Kết hợp các mảng
$all_people = array_merge($group1, $group2);
// In các đối tượng
foreach ($all_people as $person) {
echo "Name: " . $person->name . ", Age: " . $person->age . "n";
}
Yêu Cầu:
age
.Giải Thích: Sử dụng hàm usort
để sắp xếp mảng đối tượng dựa trên một thuộc tính.
// Định nghĩa lớp Person
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
// Tạo mảng chứa các đối tượng
$people = array(
new Person("John", 30),
new Person("Jane", 25),
new Person("Mike", 40)
);
// Sắp xếp mảng theo thuộc tính 'age'
usort($people, function($a, $b) {
return $a->age - $b->age;
});
// In các đối tượng sau khi sắp xếp
foreach ($people as $person) {
echo "Name: " . $person->name . ", Age: " . $person->age . "n";
}
Yêu Cầu:
Giải Thích: Hàm array_unique
được sử dụng để loại bỏ các phần tử trùng lặp trong mảng.
// Tạo mảng chứa các phần tử trùng lặp
$numbers = array(1, 2, 3, 1, 2, 4, 5);
// Xóa các phần tử trùng lặp
$unique_numbers = array_unique($numbers);
// In mảng sau khi xóa trùng lặp
print_r($unique_numbers);
Yêu Cầu:
Giải Thích: Hàm array_chunk
được sử dụng để chia mảng thành các mảng nhỏ hơn.
// Tạo mảng chứa các số nguyên
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Chia mảng thành các mảng nhỏ với 3 phần tử mỗi mảng
$chunks = array_chunk($numbers, 3);
// In các mảng nhỏ
print_r($chunks);
Yêu Cầu:
Giải Thích: Hàm array_intersect
được sử dụng để tìm các phần tử chung giữa hai mảng.
// Tạo hai mảng chứa các số nguyên
$array1 = array(1, 2, 3, 4, 5);
$array2 = array(4, 5, 6, 7, 8);
// Tìm các phần tử chung giữa hai mảng
$common_elements = array_intersect($array1, $array2);
// In các phần tử chung
print_r($common_elements);
Yêu Cầu:
Giải Thích: Hàm array_diff
được sử dụng để tìm các phần tử có mặt trong mảng này nhưng không có mặt trong mảng kia.
// Tạo hai mảng chứa các số nguyên
$array1 = array(1, 2, 3, 4, 5);
$array2 = array(4, 5, 6, 7, 8);
// Tìm các phần tử chỉ có trong mảng1 nhưng không có trong mảng2
$unique_to_array1 = array_diff($array1, $array2);
// Tìm các phần tử chỉ có trong mảng2 nhưng không có trong mảng1
$unique_to_array2 = array_diff($array2, $array1);
// In các phần tử khác nhau
echo "Unique to array1: ";
print_r($unique_to_array1);
echo "Unique to array2: ";
print_r($unique_to_array2);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_values
để lấy các giá trị của mảng liên kết và loại bỏ các khóa.
// Tạo mảng liên kết
$person = array(
"name" => "John",
"age" => 30,
"city" => "New York"
);
// Chuyển đổi mảng liên kết thành một mảng đơn
$values = array_values($person);
// In mảng đơn
print_r($values);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_combine
để kết hợp hai mảng thành một mảng liên kết.
// Tạo mảng đơn
$values = array("John", 30, "New York");
// Tạo mảng khóa
$keys = array("name", "age", "city");
// Chuyển đổi mảng đơn thành mảng liên kết
$person = array_combine($keys, $values);
// In mảng liên kết
print_r($person);
Yêu Cầu:
Giải Thích: Sử dụng hàm unset
để xóa phần tử tại chỉ số cụ thể và array_values
để reindex mảng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Xóa phần tử tại chỉ số 1 và 3
unset($numbers[1]);
unset($numbers[3]);
// Reindex mảng
$numbers = array_values($numbers);
// In mảng sau khi xóa
print_r($numbers);
Yêu Cầu:
Giải Thích: Sử dụng các chỉ số đầu tiên và cuối cùng của mảng để tìm giá trị đầu tiên và cuối cùng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Tìm giá trị đầu tiên và cuối cùng
$first = reset($numbers);
$last = end($numbers);
// In kết quả
echo "First value: " . $first . "n";
echo "Last value: " . $last . "n";
Yêu Cầu:
Giải Thích: Sử dụng hàm array_chunk
để chia mảng thành các phần tử với độ dài xác định.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Chia mảng thành các phần tử với độ dài 2
$chunks = array_chunk($numbers, 2);
// In các phần tử
print_r($chunks);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_filter
để lọc các phần tử theo điều kiện.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Xoá các phần tử nhỏ hơn 5
$filtered_numbers = array_filter($numbers, function($number) {
return $number >= 5;
});
// In mảng sau khi lọc
print_r($filtered_numbers);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_reverse
để đảo ngược thứ tự của các phần tử trong mảng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Đảo ngược các phần tử
$reversed_numbers = array_reverse($numbers);
// In mảng sau khi đảo ngược
print_r($reversed_numbers);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_fill
để tạo mảng từ các giá trị đã định nghĩa.
// Tạo mảng mới chứa giá trị 'x' với 5 phần tử
$filled_array = array_fill(0, 5, 'x');
// In mảng đã tạo
print_r($filled_array);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_combine
để kết hợp mảng khóa và mảng giá trị thành mảng liên kết.
// Tạo mảng khóa
$keys = array('name', 'age', 'city');
// Tạo mảng giá trị
$values = array('John', 30, 'New York');
// Tạo mảng liên kết
$person = array_combine($keys, $values);
// In mảng liên kết
print_r($person);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_sum
để tính tổng của các phần tử trong mảng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Tính tổng các phần tử
$sum = array_sum($numbers);
// In tổng
echo "Total sum: " . $sum . "n";
Yêu Cầu:
Giải Thích: Sử dụng hàm array_chunk
và array_filter
để chia mảng thành các mảng nhỏ hơn và lọc các phần tử.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Chia mảng thành các mảng nhỏ với tối đa 4 phần tử
$chunks = array_chunk($numbers, 4);
// Lọc các phần tử trong mỗi mảng nhỏ hơn
$filtered_chunks = array_map(function($chunk) {
return array_filter($chunk, function($number) {
return $number % 2 == 0; // Lọc các số chẵn
});
}, $chunks);
// In các mảng nhỏ hơn đã lọc
print_r($filtered_chunks);
Yêu Cầu:
Giải Thích: Sử dụng hàm explode
để chuyển chuỗi thành mảng dựa trên dấu phân cách.
// Tạo chuỗi
$string = "apple,banana,orange,grape";
// Chuyển chuỗi thành mảng
$array = explode(',', $string);
// In mảng đã tạo
print_r($array);
Yêu Cầu:
Giải Thích: Sử dụng hàm implode
để chuyển mảng thành chuỗi với dấu phân cách.
// Tạo mảng
$array = array('apple', 'banana', 'orange', 'grape');
// Chuyển mảng thành chuỗi với dấu phân cách là gạch ngang
$string = implode('-', $array);
// In chuỗi đã tạo
echo $string . "n";
Yêu Cầu:
Giải Thích: Sử dụng hàm reset
để lấy phần tử đầu tiên của mảng.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5);
// Lấy phần tử đầu tiên
$first = reset($numbers);
// In phần tử đầu tiên
echo "First element: " . $first . "n";
Yêu Cầu:
Giải Thích: Tạo mảng liên kết và cập nhật giá trị của một khóa cụ thể.
// Tạo mảng liên kết
$person = array(
"name" => "John",
"age" => 30,
"city" => "New York"
);
// Thay đổi giá trị của khóa 'city'
$person["city"] = "Los Angeles";
// In mảng liên kết
print_r($person);
Yêu Cầu:
Giải Thích: Sử dụng hàm sort
để sắp xếp mảng theo giá trị tăng dần.
// Tạo mảng số nguyên
$numbers = array(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5);
// Sắp xếp mảng theo giá trị tăng dần
sort($numbers);
// In mảng đã sắp xếp
print_r($numbers);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_combine
để kết hợp các chỉ số với giá trị của mảng.
// Tạo mảng số nguyên
$numbers = array(10, 20, 30);
// Tạo mảng khóa từ chỉ số của mảng số
$keys = array_keys($numbers);
// Tạo mảng liên kết
$assoc_array = array_combine($keys, $numbers);
// In mảng liên kết
print_r($assoc_array);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_diff
để xoá phần tử có giá trị cụ thể.
// Tạo mảng số nguyên
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Xoá phần tử có giá trị 5
$filtered_numbers = array_diff($numbers, array(5));
// In mảng đã lọc
print_r($filtered_numbers);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_merge
để kết hợp hai mảng.
// Tạo hai mảng số nguyên
$array1 = array(1, 2, 3);
$array2 = array(4, 5, 6);
// Kết hợp hai mảng
$merged_array = array_merge($array1, $array2);
// In mảng đã kết hợp
print_r($merged_array);
Yêu Cầu:
Giải Thích: Sử dụng hàm array_intersect
để tìm các phần tử chung giữa hai mảng.
// Tạo hai mảng số nguyên
$array1 = array(1, 2, 3, 4, 5);
$array2 = array(4, 5, 6, 7, 8);
// Tìm các phần tử chung
$common_elements = array_intersect($array1, $array2);
// In các phần tử chung
print_r($common_elements);
Việc làm chủ các thao tác với mảng trong PHP không chỉ là một phần thiết yếu trong quá trình phát triển ứng dụng mà còn là nền tảng vững chắc cho việc giải quyết các vấn đề lập trình phức tạp. Qua 50 bài tập thực hành chi tiết này, bạn đã được trang bị với những kỹ năng quan trọng để thao tác với mảng một cách hiệu quả và chính xác. Từ việc tạo và xử lý các phần tử trong mảng, đến việc sử dụng các hàm nâng cao như sắp xếp, lọc, và kết hợp mảng, mỗi bài tập đều mang đến cơ hội để củng cố và mở rộng kiến thức của bạn.
Những bài tập này không chỉ giúp bạn hiểu rõ hơn về các chức năng của PHP mà còn cải thiện khả năng phân tích và giải quyết vấn đề trong lập trình. Việc áp dụng những kỹ thuật này trong các dự án thực tế sẽ giúp bạn xây dựng các ứng dụng mạnh mẽ và tối ưu hơn. Hãy tiếp tục thực hành và khám phá thêm để không ngừng nâng cao kỹ năng lập trình của mình. Chúc bạn thành công trong hành trình làm chủ PHP và trở thành một lập trình viên xuất sắc!