Mảng và hàm

Mảng (array)

Mảng là nơi lưu trữ nhiều giá trị trong 1 biến số.

Mảng có 2 loại là arrayassociative array.

  • Array được lấy dữ liệu ra bằng index.
  • Associative array được lấy dữ liệu bằng cả index lẫn key.

Chúng ta có thể dùng vòng lặp để tuần tự lấy các phần tử trong array ra.

Ví dụ:


<?php
$listItem = [
	"Item 1",
	"Item 2",
	"Item 3",
	"Item 4",
	"Item 5",
];
print("[+] Array length: ". count($listItem)."\n");
print("----------------LOOP GET VALUE ONLY-------------\n");
foreach($listItem as $item){
	print($item."\n");
}
print("----------------LOOP GET VALUE AND INDEX-------------\n");
foreach($listItem as $index => $item){
	print($index." => ".$item."\n");
}
print("----------------LOOP GET KEY AND VALUE ONLY-------------\n");
$listItem = [
	"key1" => "Item 1",
	"key2" => "Item 2",
	"key3" => "Item 3",
	"key4" => "Item 4",
	"key5" => "Item 5",
];
foreach($listItem as $key => $item){
	print($key." => ".$item."\n");
}

Dùng hàm count để lấy độ dài của array.

<?php
$myArray = ['item 1', 'item 2', 'item 3'];
print_r(count($myArray)); # 3

Dùng hàm explode để băm chuỗi thành mảng bằng delimiter.

<?php
$myString = 'item 1,item 2,item 3';
$myArray = explode(',', $myString);
print_r($myArray); # ['item 1', 'item 2', 'item 3']

Dùng hàm implode để gộp 1 mảng thành chuỗi thông qua delimiter.

<?php
$myArray = ['item 1', 'item 2', 'item 3'];
$myString = implode(',', $myArray);
print_r($myString); # 'item 1,item 2,item 3'

Chúng ta có thể dùng các hàm có sẵn của PHP để sắp xếp lại thứ tự của các phần tử trong mảng.

Các hàm sắp xếp của PHP:

  • sort – Sắp xếp mảng tăng dần (Aray thường)
  • rsort – Sắp xếp mảng giảm dần (Array thường)
  • assort – Sắp xếp mảng tăng dần dựa vào giá trị (associative array)
  • ksort – Sắp xếp mảng tăng dần dựa vào key (associative array)
  • arsort – Sắp xếp mảng giảm dần dựa vào giá trị (associative array)
  • krsort – Sắp xếp mảng giảm dần dựa vào key (associative array)

Ví dụ

<?php

print("============ NORMAL ARRAY EXAMPLE =============\n");
$listItem = [
	"Banana",
	"Pineapple",
	"Apple",
	"Jackfruit",
];
print("------------ASCENDING SORT------------\n");
sort($listItem);
print_r($listItem);
print("------------DESCENDING SORT------------\n");
rsort($listItem);
print_r($listItem);

print("============ ASSOCIATIVE ARRAY EXAMPLE =============\n");
$listItem = [
	"key2" => "Banana",
	"key3" => "Pineapple",
	"key1" => "Apple",
	"key4" => "Jackfruit",
];
print("------------ASCENDING SORT BY KEY------------\n");
ksort($listItem);
print_r($listItem);
print("------------DESSCENDING SORT BY KEY------------\n");
krsort($listItem);
print_r($listItem);
print("------------ASCENDING SORT BY VALUE------------\n");
asort($listItem);
print_r($listItem);
print("------------DESSCENDING SORT BY VALUE------------\n");
arsort($listItem);
print_r($listItem);

Chuỗi (string)

Xử lý chuỗi là công việc rất phổ biến khi làm lập trình, do đó tuy String là kiểu dữ liệu cơ bản của PHP nhưng được sử dụng rộng rãi nhất và có nhiều tính năng đáng chú ý.

Các tính năng được sử dụng phổ biến của string:

  • strlen – Lấy độ dài của chuỗi
  • str_word_count – Đếm số từ trong string (ngăn cách bằng khoảng trống)
  • strrev – Đảo ngược thứ tự các ký tự trong chuỗi
  • strpos – Tìm vị trí (index) của ký tự/chuỗi ký tự trong chuỗi khác
  • str_replace – Thay thế ký tự/chuỗi ký tự

String được định nghĩa là chuỗi ký tự được bao bởi " hoặc '

Có 1 sự khác biệt cơ bản giữa chuỗi ký tự "' là đối với chuỗi ký tự sử dụng ", PHP sẽ parse dữ liệu từ biến số hoặc thay thế các ký tự đặc biệt bắt đầu bằng \.

Ví dụ

<?php

$sampleStr = "I love PHP very much!";
print("Original string: $sampleStr\n");
print("String length: ".strlen($sampleStr)."\n");
print("String word count: ".str_word_count($sampleStr)."\n");
print("Position of PHP: ".strpos($sampleStr, "PHP")."\n");
print("Replace PHP by Python: ".str_replace("PHP", "Python", $sampleStr)."\n");
print("String reverse: ".strrev($sampleStr)."\n");

File

Ví dụ về đọc/ghi file:

Tạo 1 file sample.txt với nội dung bên dưới và 1 file sample_new.txt rỗng:

key1: value 1
key2: value 2
key3: value 3
key4: value 4
key5: value 5
Extra 1: Data 1
Extra 1: Data 1

Đọc file:

<?php

$fileName = "sample.txt";
$myFile = fopen($fileName, "r") or die("Unable to open file!");
print("---------------READING WHOLE FILE------------------\n");
print(fread($myFile, filesize($fileName)));
fclose($myFile);

$myFile = fopen($fileName, "r") or die("Unable to open file!");
print("---------------READING FILE LINE BY LINE------------------\n");
while(!feof($myFile)){
	$lineData = fgets($myFile);
	print($lineData);
}
fclose($myFile);

Ghi file:

<?php

$oldFile = "sample.txt";
$newFile = "sample_new.txt";
$myFile = fopen($newFile, "a") or die("Unable to open file.");
$newContent = "Extra 1: Data 1\n";
fwrite($myFile, $newContent);
fwrite($myFile, $newContent);
fclose($myFile);

Upload file

Tạo 1 folder tên là uploaded và 2 file upload_landing.html, upload_destination.php với nội dung:

<!-- upload_landing.html -->
<form method="post" action="upload_destination.php" enctype="multipart/form-data">
<input type="file" name="uploadFile"/>
<button>Upload file</button>
</form>
<?php

$targetDir = "./uploaded/";
$targetFile = $targetDir.basename($_FILES["uploadFile"]["name"]);
$tmpFile = $_FILES["uploadFile"]["tmp_name"];

$uploadStatus = move_uploaded_file($tmpFile, $targetFile);

if($uploadStatus){
	print("Upload success!");
}else{
	print("Upload failed!");
}

Chạy build-in server:

php -nS localhost:8000

Vào địa chỉ http://localhost:8000/upload_landing.html để test.

Tham khảo thêm các option tại: http://www.w3schools.com/php/php_file_open.asp

Hàm (function)

PHP có rất nhiều function có sẵn (hơn 1.000 functions) rất hữu dụng, ví dụ như var_dump, print

Ngoài những function này, chúng ta có thể dựa vào nhu cầu cụ thể để định nghĩa ra các function cho riêng mình.

  • Function là một khối các câu lệnh có thể sử dụng lại tại nhiều nơi trong chương trình.
  • Function sẽ không chạy ngay khi được khai báo.
  • Function chỉ chạy khi được gọi.

Các loại hàm cần quan tâm:

Function chỉ là 1 khối lệnh thông thường, không tham số

<?php

function sayHello(){
	print("Hello world\n");
}

sayHello();

Function có tham số

<?php
function threeWishesFromGenie($firstWish, $secondWish, $thirdWish){
	print("Your wishes are: \"".$firstWish.", ".$secondWish.", ".$thirdWish."\"\n");
}
threeWishesFromGenie("Rich", "Handsome", "Smart");

Function có tham số mặc định

<?php
function threeWishesFromGenie($firstWish, $secondWish, $defaultWish="Smart"){
	print("Your wishes are: \"".$firstWish.", ".$secondWish.", ".$defaultWish."\"\n");
}
threeWishesFromGenie("Rich", "Handsome");

Function có giá trị trả về

<?php
function sayHello($name){
	$result = "Hello ".$name."\n";
	return $result;
}

print(sayHello("PHP"));

Bài tập

Sửa, xoá một dòng trong mảng 2 chiều

Vấn đề: Có 1 danh bạ điện thoại gồm 1 danh sách các contact có cấu trúc: tên liên lạc, số đt, email Hãy viết 1 hàm để sửa và 1 hàm để xoá 1 contact dựa trên số điện thoại.

Bài liên quan:

Son Tran
Fullstack web / mobile developer
Laravel / Django / React / React Native.
Contact