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

Apr 23, 2020 | Bài thực hành, Blog | 0 comments

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é!

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

BÀI VIẾT LIÊN QUAN

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

GỌI NGAY 

098 953 44 58

Nhận tư vấn, định hướng 1-1

Điền và gửi thông tin cá nhân để được tư vấn miễn phí về các chương trình học.

6 + 5 =