Hướng dẫn dùng data strcuture trong PHP

Trong khoa học máy tính, cấu trúc dữ liệu là một cách lưu dữ liệu trong máy tính sao cho nó có thể được sử dụng một cách hiệu quả.

Nội dung chính

  • Các cấu trúc dữ liệu thông dụng
  • Doubly Linked List (Danh sách Liên kết Đôi)
  • 2. Kiểu dữ liệu Integer
  • 3. Kiểu dữ liệu Float
  • 4. Kiểu dữ liệu String
  • 5. Kiểu dữ liệu Boolean
  • 6. Kiểu dữ liệu Array
  • 7. Kiểu dữ liệu Object
  • 8. Kiểu dữ liệu NULL
  • 9. Kiểu dữ liệu Resource

Cấu trúc dữ liệu là hình thức tổ chức một nhóm dữ liệu bao gồm các chức năng:

  • Lưu trữ dữ liệu
  • Cung cấp các phương thức để thao tác với dữ liệu.

Trong thiết kế nhiều loại chương trình, việc chọn cấu trúc dữ liệu là vấn đề quan trọng. Kinh nghiệm trong việc xây dựng các hệ thống lớn cho thấy khó khăn của việc triển khai chương trình, chất lượng và hiệu năng của kết quả cuối cùng phụ thuộc rất nhiều vào việc chọn cấu trúc dữ liệu tốt nhất.

Mỗi loại cấu trúc dữ liệu phù hợp với một vài loại ứng dụng khác nhau, một số cấu trúc dữ liệu dành cho những công việc đặc biệt. Ví dụ, các B-tree đặc biệt phù hợp trong việc thiết kế cơ sở dữ liệu. Sau khi cấu trúc dữ liệu được chọn, người ta thường dễ nhận thấy thuật toán cần sử dụng. Đôi khi trình tự công việc diễn ra theo thứ tự ngược lại: cấu trúc dữ liệu được chọn do những bài toán quan trọng nhất định có thuật toán chạy tốt nhất với một số cấu trúc dữ liệu cụ thể. Trong cả hai trường hợp, việc lựa chọn cấu trúc dữ liệu là rất quan trọng.

Cấu trúc dữ liệu là một khái niệm rất quan trọng trong lập trình, bởi vì nó ảnh hưởng rất lớn đến hiệu năng của hệ thống. Việc lựa chọn được cấu trúc dữ liệu phù hợp trong từng bài toán sẽ giúp cho hiệu năng của hệ thống được đảm bảo tốt nhất. Ngược lại, nếu không sử dụng đúng cấu trúc dữ liệu cần thiết thì có thể gây ảnh hưởng rất lớn đến hoạt động của hệ thống, hậu quả có thể là rất lớn.

Trong một cấu trúc dữ liệu thì có 2 thành phần quan trọng chính là container và element.

  • Container: Là lớp chứa dữ liệu và cung cấp các phương thức để thao tác với dữ liệu
  • Elements: Chính là các phần tử dữ liệu

Ví dụ:

  • Lớp ArrayList là cấu trúc danh sách, lưu trữ nhiều giá trị liên tiếp nhau
  • Các phương thức được cung cấp để thực hiện các thao tác với ArrayList là: Thêm phần tử, xoá phần tử, duyệt phần tử, tìm kiếm…

Các cấu trúc dữ liệu thông dụng

  • Set (Tập hợp): Nhóm các phần tử không trùng nhau
  • List (Danh sách): Nhóm ác phần tử có thể trùng nhau
  • Stack: Nhóm các phần tử theo trật tự first-in/last-out (vào trước/ra sau)
  • Queue: Nhóm các phần tử theo trật tự first-in/first-out (vào trước/ra trước)
  • Map (Bản đồ): Lưu trữ các cặp key/value
  • Tree (Cây): Lưu trữ các phần tử theo mối quan hệ cha-con
  • Graph (Đồ thị): Lưu trữ các phần tử theo mối quan hệ mạng lưới
  • Doubly Linked List (Danh sách Liên kết Đôi)
  • Heaps
  • Arrays
  • Map

Bộ thư biện SPL (Standard PHP Library – Bộ thư viện chuẩn của PHP) cung cấp nhiều cấu trúc dữ liệu tiêu chuẩn để chúng ta có thể sử dụng ngay trong ứng dụng của mình. Các cấu trúc dữ liệu này được phân thành các nhóm dựa vào hình thức triển khai của chúng, và cũng căn cứ vào cách sử dụng chúng trong các tình huống thực tế.

Doubly Linked List (Danh sách Liên kết Đôi)

Một danh sách liên kết đôi là một danh sách các node được liên kết với nhau theo cả hai hướng.

PHP cung cấp sẵn các lớp thuộc nhóm danh sách liên kết đôi bao gồm:

  • SplDoublyLinkedList
    • SplStack
    • SplQueue

Heaps

Heaps là một dạng cấu trúc gần giống với tree, trong đó mỗi node sẽ có giá trị lớn hơn hoặc bằng các node con của nó.

PHP cung cấp sẵn các lớp thuộc nhóm Heaps bao gồm:

  • SplHeap
    • SplMaxHeap
    • SplMinHeap
  • SplPriorityQueue

Arrays

Arrays là cấu trúc dữ liệu trong đó lưu trữ các phần tử theo hình thức liên tiếp nhau, các phần tử này được truy cập dựa vào chỉ số của chúng.

Lưu ý: Cấu trúc Arrays không phải đồng nghĩa với khái niệm “mảng” trong PHP, mảng trong PHP thực tế được triển khai theo hình thức của các hastable (bảng băm) có trật tự.

PHP cung cấp sẵn lớp sau:

  • SplFixedArray

Map

Map là một cấu trúc dữ liệu trong đó các phần tử được quản lí theo cặp key-value (khoá-giá trị).

Mảng trong PHP cũng có thể được xem là cấu trúc map, trong đó key có kiểu dữ liệu là integer hoặc string.

PHP cung cấp thêm lớp sau trong nhóm Map:

  • SplObjectStorage

Lưu ý: Học viên có thể tìm hiểu đầy đủ về các cấu trúc dữ liệu sẵn có trong PHP ở đây: https://www.php.net/manual/en/spl.datastructures.php

Bài này sẽ giới thiệu các kiểu dữ liệu (data type) trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.

Biến (variable) có thể lưu trữ dữ liệu của những kiểu dữ liệu khác nhau. PHP hỗ trợ các loại kiểu dữ liệu sau:

– Kiểu dữ liệu được định nghĩa sẵn (pre-defined data type):

    • Boolean
    • Integer
    • Float
    • String

– Kiểu dữ liệu do lập trình viên định nghĩa (user-defined data type):

    • Array
    • Object

– Kiểu dữ liệu đặc biệt (special data type):

    • NULL
    • Resource

2. Kiểu dữ liệu Integer

Kiểu dữ liệu Integer lưu trữ giá trị số nguyên từ -2,147,483,648 (-2^31) đến 2,147,483,647 (2^31) trong hệ thống 32bit. Một số Interger có thể là số nguyên âm hoặc nguyên dương. Số Integer có thể được biểu diễn ở hệ cơ số 10 (decimal), 8 (octal), 16 (hexadecimal), 2 (binary) và mặc định là hệ cơ số 10.

Các số nguyên biểu diễn ở hệ bát phân được khai báo với chữ số 0 đứng đầu và hệ thập lục phân được khai báo với 0x đứng đầu.

";
// octal base integers
$octal = 015;
echo "Print decimal value of octal 15: ";
echo $octal."
"; // hexadecimal base integers $hexa = 0x45; echo "Print decimal value of hexadecimal 45: "; echo $hexa; ?>
Kết quả
704
Print decimal value of octal 15: 13
Print decimal value of hexadecimal 45: 69

3. Kiểu dữ liệu Float

Kiểu dữ liệu Float (Floating Point Numbers) trong PHP còn gọi là Double. Kiểu Float có thể chứa các số thực với dấu chấm động ngăn cách phần nguyên và phần thập phân.


Kết quả
104.13

4. Kiểu dữ liệu String

Một String là một chuỗi (String) các ký tự, kể cả các chữ số. Chúng ta có thể sử dụng dấu nháy kép (double quotes) hoặc nháy đơn (single quotes) để tạo một chuỗi (String). Hai loại dấu nháy này có một điểm khác biệt. Xem ví dụ bên dưới để thấy sự khác biệt này.

";
echo 'Domain name of website is $domainname';
?>
Kết quả
Domain name of website is gochocit.com
Domain name of website is $domainname

5. Kiểu dữ liệu Boolean

Kiểu dữ liệu Boolean chỉ lưu trữ 2 giá trị: TRUE hoặc FALSE. Giá trị kiểu NULL cũng được coi là FALSE trong Boolean. Ngoài NULL, 0 cũng được coi là FALSE trong Boolean. Nếu một chuỗi (string) rỗng (empty) thì nó cũng được coi là FALSE trong Boolean.


Kết quả
bool(true) bool(false) NULL bool(false) bool(false)

6. Kiểu dữ liệu Array

Một mảng (array) giúp lưu trữ nhiều giá trị có cùng kiểu dữ liệu trong một biến (variable).


Kết quả
array(3) { [0]=> string(5) "lemon" [1]=> string(6) "orange" [2]=> string(10) "strawberry" }

7. Kiểu dữ liệu Object

Lớp (class) và đối tượng (object) là 2 khái niệm quan trọng trong lập trình hướng đối tượng (object-oriented programming). Một class là một khuôn mẫu cho objects và một object là một thực thể của một class. Chúng ta sẽ tìm hiểu kỹ hơn về class và object trong phần Lập trình OOP trong PHP.

domainname = $domainname;
      $this->numberposts = $numberposts;
    }
    public function message() {
      return "My website is " . $this->domainname . ", has " . $this->numberposts . " posts.";
    }
  }
  
  $myWebsite = new Website("gochocit.com", "370");
  echo $myWebsite -> message();
?>
Kết quả
My website is gochocit.com, has 370 posts.

8. Kiểu dữ liệu NULL

NULL là một kiểu dữ liệu đặc biệt, chỉ có thể lưu trữ một giá trị là NULL. Một biến (variable) có kiểu dữ liệu NULL là một biến không có giá trị nào được gán cho nó.


Kết quả
NULL

9. Kiểu dữ liệu Resource

Kiểu dữ liệu Resource là một kiểu dữ liệu đặc biệt. Nó thật chất không phải là kiểu dữ liệu thực tế. Nó thể hiện việc lưu trữ một tham chiếu đến các hàm và tài nguyên bên ngoài PHP. Một ví dụ phổ biến của việc sử dụng kiểu dữ liệu Resource là một kết nối đến database.

  • Hàm in_array() trong PHP
  • Chuyển đổi chuỗi (string) thành mảng (array) với hàm str_split() trong PHP
  • Các chỉ định truy cập (access modifier) trong PHP
  • Lớp Reader và Writer trong Java
  • Sửa (update) dữ liệu và câu lệnh drop trong MySQL với Python