Trang chủ » Blog » [Thực hành] Lọc danh sách khách hàng

[Thực hành] Lọc danh sách khách hàng

bởi CodeGym | 26/12/2023 17:15 | Bài thực hành | Blog

Mục tiêu

Luyện tập sử dụng hàm và mảng đa chiều để lọc danh sách khách hàng.

Mô tả – lọc danh sách khách hàng

Sử dụng trang web hiển thị danh sách khách hàng từ bài trước. Xây dựng hàm để lọc các khách hàng có ngày sinh nằm trong khoảng tùy chọn. Trang index.php có thêm form để lọc khách hàng theo ngày sinh từ …. đến ….

Nếu không có khách hàng nào trong khoảng được lọc thì hiển thị thông báo không tìm thấy. Nếu có thì hiển thị khách hàng đó lên bảng.

Các bước thực hiện

Bước 1: Tạo file index.php, sử dụng mã html tạo giao diện như hình.

Lọc danh sách khách hàng

Mã HTML:

<form method="post">
  Từ: <input id = "from" type="text" name="from" placeholder="yyyyy/mm/dd"/>
  Đến: <input id = "to" type="text" name="to" placeholder="yyyy/mm/dd" />
  <input type = "submit" id = "submit" value = "Lọc"/>
</form>

Chạy chương trình và quan sát kết quả.

Bước 2: Tạo dữ liệu để chạy thử chương trình.

Tạo một mảng là một danh sách khách hàng. Việc lọc ở bước kế tiếp sẽ lọc trong danh sách khách hàng này.

Mã PHP:

<?php
$customer_list = array(
    "0" => array("name" => "Mai Văn Hoàn", "day_of_birth" => "1983/08/20", "address" => "Hà Nội", "image" => "images/img1.jpg"),
    "1" => array("name" => "Nguyễn Văn Nam", "day_of_birth" => "1983/08/21", "address" => "Bắc Giang", "image" => "images/img2.jpg"),
    "2" => array("name" => "Nguyễn Thái Hòa", "day_of_birth" => "1983/08/22", "address" => "Nam Định", "image" => "images/img3.jpg"),
    "3" => array("name" => "Trần Đăng Khoa", "day_of_birth" => "1983/08/17", "address" => "Hà Tây", "image" => "images/img4.jpg"),
    "4" => array("name" => "Nguyễn Đình Thi", "day_of_birth" => "1983/08/19", "address" => "Hà Nội", "image" => "images/img5.jpg")
);
?>

Bước 3: Xây dựng hàm tìm kiếm searchByDate() với 3 tham số đầu vào.

Nguyên mẫu hàm: function searchByDate($customers, $from_date, $to_date) {}

Trong đó:

  • $customers là danh sách khách hàng ban đầu
  • $from_date là ngày bắt đầu
  • $to_date là ngày kết thúc

Mã PHP:

function searchByDate($customers, $from_date, $to_date) {
    if(empty($from_date) && empty($to_date)){
        return $customers;
    }
    $filtered_customers = [];
    foreach($customers as $customer){
        if(!empty($from_date) && (strtotime($customer['day_of_birth']) < strtotime($from_date)))
            continue;
        if(!empty($to_date) && (strtotime($customer['day_of_birth']) > strtotime($to_date)))
            continue;
        $filtered_customers[] = $customer;
    }
    return $filtered_customers;
}

Bước 4: Gọi hàm tìm kiếm

Lấy $from_date và $to_date từ form và gọi hàm lọc khách hàng.

Mã PHP:

$from_date = NULL;
$to_date = NULL;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $from_date = $_POST["from"];
    $to_date = $_POST["to"];
}
$filtered_customers = 
searchByDate
($customer_list, $from_date, $to_date);

Bước 5: Hiển thị danh sách khách hàng.

Mã PHP:

<table border="0">
  <caption><h2>Danh sách khách hàng</h2></caption>
  <tr>
    <th>STT</th>
    <th>Tên</th>
    <th>Ngày sinh</th>
    <th>Địa chỉ</th>
    <th>Ảnh</th>
  </tr>
  <?php if(count($filtered_customers) === 0):?>
    <tr>
        <td colspan="5" class="message">Không tìm thấy khách hàng nào</td>
    </tr>
  <?php endif; ?>
 
  <?php foreach($filtered_customers as $index => $customer): ?>
    <tr>
        <td><?php echo $index + 1;?></td>
        <td><?php echo $customer['name'];?></td>
        <td><?php echo $customer['day_of_birth'];?></td>
        <td><?php echo $customer['address'];?></td>
        <td><div class="profile"><img src="<?php echo $customer['profile'];?>"/></div> </td>
    </tr>
    <?php endforeach; ?>
</table>

Kiểm thử:

1 : Tìm khách hàng có ngày sinh từ 1983-08-20 đến 1983-08-23. Kết quả hiển thị như hình:

2: Tìm khách hàng nhưng không nhập ngày sinh. Kết quả hiển thị như hình:

3: Tìm khách hàng nhập ngày sinh  từ 1983/9/1 đến 1982/19/2. Kết quả hiển thị như hình:

Qua bài tập trên chúng ta đã luyện tập:

  • Khai báo mảng đa chiều
  • Duyệt mảng đa chiều với vòng lặp foreach
  • Sử dụng câu lệnh if
  • Xây dựng hàm với tham số đầu vào
  • Gọi hàm

Mã nguồn mẫu: https://github.com/codegym-vn/customer-filter

Demo: http://demo.codegym.vn/lamp/3/customer-filter/

Trên đây CodeGym đã cùng với bạn luyện tập sử dụng hàm và mảng đa chiều. Hãy chụp ảnh màn hình và nộp bài thực hành của bạn trên CodeGymX để cùng nhau luyện tập nhé!

Tags:

0 Lời bình

Gửi Lời bình

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

BÀI VIẾT LIÊN QUAN

BẠN MUỐN HỌC LẬP TRÌNH?

GỌI NGAY

098 953 44 58

Đăng ký tư vấn lộ trình học lập trình

Đăng ký tư vấn, định hướng lộ trình học và giải đáp các thắc mắc về ngành nghề – Miễn phí – Online.

1 + 14 =

TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM
TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM