Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng

 Khái niệm về mảng

 Mảng

– Bao gồm một dãy các ô nhớ có nhiều ô nhớ con cho phép

biểu diễn thông tin dạng danh sách trong thực tế

 PHP: Các phần tử trong mảng có thể có kiểu dữ liệu

khác nhau

 Ví dụ:

– 8 số nguyên => mảng có 8 phần tử

– Danh sách học sinh => mảng thông tin các học sinh

Mảng một chiều

 Khai báo và khởi tạo

– Dùng array() để khai báo và khởi tạo

– Mảng chưa biết số phần tử và giá trị

• Cú pháp: $tên_mảng = array();

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng trang 1

Trang 1

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng trang 2

Trang 2

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng trang 3

Trang 3

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng trang 4

Trang 4

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng trang 5

Trang 5

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng trang 6

Trang 6

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng trang 7

Trang 7

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng trang 8

Trang 8

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng trang 9

Trang 9

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 60 trang duykhanh 8460
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng

Bài giảng Thiết kế và lập trình Web - Bài 6: Thao tác trên mảng
t chiều 
 Thao tác trên mảng một chiều 
– Duyệt mảng có khóa tự động 
• Dùng vòng lặp for để duyệt mảng 
• Cú pháp: 
<?php 
for($i=0;$i<$số_phần_tử;$i++) 
{ 
 Xử lý các phần tử trong mảng (đọc, tính toán, thay 
đổi, ...) 
 với mỗi phần tử: $tên_mảng[i] 
} 
?> 
Thiết kế và lập trình Web 
12 
Mảng một chiều 
– Duyệt mảng có khóa tự động 
• Ví dụ: 
<?php 
 $mang_1 = array(1,2,3,4,5,6); 
 $n=count($mang_1); 
 for($i=0;$i<$n;$i++) 
 echo “\t” .$mang_1[$i]; 
 → 1 2 3 4 5 6 
?> 
Thiết kế và lập trình Web 
13 
Mảng một chiều 
 Thao tác trên mảng một chiều 
– Duyệt mảng có khóa do người dùng tạo 
• Dùng vòng lặp foreach để duyệt mảng – Duyệt để lấy giá trị của các 
phần tử trong mảng 
• Cú pháp: 
<?php 
foreach ($tên_mảng as $giá_trị) 
{ 
 Xử lý các giá trị trong mảng (đọc, tính toán, thay 
đổi, ...) 
 với mỗi phần tử: $giá_trị 
} 
?> 
Thiết kế và lập trình Web 
14 
Mảng một chiều 
– Duyệt mảng có khóa do người dùng tạo 
• Ví dụ: 
<?php 
 $mang_2 = array(1=> “Một”, 2=> “Hai”, 3=> “Ba”, 
4=> “Bốn”, 5=> “Năm”); 
 foreach ($mang_2 as $gia_tri) 
 { 
 echo "\t $gia_tri"; 
 } 
 → Một Hai Ba Bốn Năm 
?> 
Thiết kế và lập trình Web 
15 
Mảng một chiều 
– Duyệt mảng có khóa do người dùng tạo 
• Dùng vòng lặp foreach để duyệt mảng – Duyệt để lấy cả giá trị của 
khoá và giá trị của phần tử 
• Cú pháp: 
<?php 
foreach($tên_mang as $khóa=>$giá_trị) 
{ 
 Xử lý 
 với mỗi phần tử: $khoá=>$giá_trị 
} 
?> 
Thiết kế và lập trình Web 
16 
Mảng một chiều 
– Duyệt mảng có khóa do người dùng tạo 
• Ví dụ: 
<?php 
 $mang_3 = array(“mot”=>1, “hai”=>2, “ba”=>3, “bon”=>4, 
“nam”=>5); 
 foreach ($mang_3 as $khoa=>$gia_tri) 
 { 
 echo " [$khoa] => $gia_tri"; 
 } 
 → [mot] => 1 [hai] => 2 [ba] => 3 
 [bon] => 4 [nam] => 5 
?> 
Thiết kế và lập trình Web 
19 
Mảng hai chiều 
 Khai báo và khởi tạo 
– Lồng array() hai cấp 
– Mảng chưa biết số phần tử và giá trị 
• Cú pháp: $tên_mảng = array(array()); 
• Ví dụ: 
<?php 
 $mang_2_chieu = array(array()); 
?> 
Thiết kế và lập trình Web 
20 
Mảng hai chiều 
 Khai báo và khởi tạo 
– Mảng biết trước giá trị của các phần tử 
• Vừa khai báo vừa khởi tạo giá trị cho các phần tử của mảng 
• Cú pháp: $tên_mảng = array(array([$khóa]=>$giá_trị, ...), 
array(...),...); 
• Ví dụ: 
<?php 
 $mang_1 = array(array(1,2), array(3,4), array(5,6)); 
 $mang_2 = array(array(1=> “Một”, 2=> “Hai”), array( 3=> 
 “Ba”, 4=> “Bốn”), array(5=> “Năm”, 6=>”Sáu”)); 
?> 
Thiết kế và lập trình Web 
21 
Mảng hai chiều 
 Khai báo và khởi tạo 
– Khởi tạo giá trị cho từng phần tử của mảng: 
• Mảng có khóa tự động (người dùng không thiết lập giá trị cho khóa) 
• Cú pháp: $tên_mảng[vị trí dòng][vị trí cột] = ; 
• Ví dụ: 
<?php 
 $mang_1[2][3] = 7; 
?> 
Thiết kế và lập trình Web 
22 
Mảng hai chiều 
 Khai báo và khởi tạo 
– Khởi tạo giá trị cho từng phần tử của mảng: 
• Mảng có khóa do người thiết lập giá trị 
• Cú pháp: $tên_mảng[vị trí dòng][giá trị khóa] = ; 
• Ví dụ: 
<?php 
 $mang_2[2][7] = “Bảy”; 
?> 
Thiết kế và lập trình Web 
23 
Mảng hai chiều 
 Truy xuất phần tử trong mảng 
– Cú pháp: $giá_trị = $tên_mảng[vị trí dòng][vị trí cột]; 
– Ví dụ: truy xuất phần tử đầu tiên trong các mảng ở ví dụ trên 
<?php 
 $gia_tri_1 = $mang_1[0][0]; → 1 
 $gia_tri_2 = $mang_2[0][1]; → “Một” 
?> 
Thiết kế và lập trình Web 
24 
Mảng hai chiều 
 Thao tác trên mảng hai chiều 
– Đếm số dòng của mảng count() 
• Cần phải biết số dòng trên mảng vì các thao tác duyệt mảng hai chiều 
sẽ duyệt lần lượt từng dòng trên mảng, và cứ mỗi dòng này lại duyệt 
tiếp từng phần tử có trên dòng 
• Cú pháp: $số_dòng = count($tên_mảng); 
Thiết kế và lập trình Web 
25 
Mảng hai chiều 
 Thao tác trên mảng hai chiều 
– Duyệt từng phần tử trên mỗi dòng 
• Ví dụ: xuất giá trị của các phần tử trong mảng 1 
<?php $so_dong=count($mang_1); 
 for($i=0;$i<$so_dong;$i++) 
 { echo “Dòng $i: ”; 
 foreach($mang_1[$i] as $gia_tri) 
 echo $gia_tri; 
 } 
 → Dòng 0: 1 2 
 Dòng 1: 3 4 
 Dòng 2: 5 6 7 
?> 
Thiết kế và lập trình Web 
26 
Mảng hai chiều 
 Thao tác trên mảng hai chiều 
– Duyệt từng phần tử trên mỗi dòng 
• Ví dụ: xuất khóa và giá trị của các phần tử trong mảng 2 
<?php $so_dong=count($mang_2); 
 for($i=0;$i<$so_dong;$i++) 
 { echo “Dòng $i: ”; 
 foreach ($mang_2[$i] as $key=>$gia_tri) 
 echo " $key=>$gia_tri "; 
 } 
 → Dòng 0: 1=>Một 2=>Hai 
 Dòng 1: 3=>Ba 4=>Bốn 
 Dòng 2: 5=>Năm 6=>Sáu 7=>Bảy 
?> 
Thiết kế và lập trình Web 
27 
Quizes 
–Cho biết sau khi thực hiện đoạn mã dưới 
đây thì biến mảng $array chứa những phần 
tử nào? 
<?php 
 $array = array ('1', '1'); 
 foreach ($array as $k => $v) { 
 $v = 2; 
} 
?> 
Thiết kế và lập trình Web 
28 
Quizes 
–Cho mảng $multi_array được khai báo như 
dưới đây. Cho biết câu lệnh truy xuất đến giá 
trị cat trong mảng? 
<?php 
$multi_array = array("red", "green", 42 => "blue", 
 "yellow" => array("apple", 
 9 => "pear", 
 "banana", 
 "orange" => 
 array("dog","cat","iguana") 
 ) 
 ); 
?> 
Thiết kế và lập trình Web 
30 
Quizes 
–Hãy cho biết kết quả của đoạn script PHP 
sau: 
<?php 
 $s = '12345'; 
 $s[$s[1]] = '2'; 
 echo $s; 
?> 
Thiết kế và lập trình Web 
31 
Quizes 
–Hãy cho biết kết quả của đoạn script PHP 
sau: 
<?php 
 $array = array (0.1 => 'a', 0.2 => 'b'); 
 echo count ($array); 
?> 
Thiết kế và lập trình Web 
32 
Quizes 
–Hãy cho biết kết quả của đoạn script PHP 
sau: 
<?php 
 $array = array (1, 2, 3, 5, 8, 13, 21, 34, 55); 
$sum = 0; 
for ($i = 0; $i < 5; $i++) { 
 $sum += $array[$array[$i]]; 
} 
echo $sum; 
?> 
Thiết kế và lập trình Web 
33 
3. Sắp xếp mảng 
Thiết kế và lập trình Web 
34 
Sắp xếp mảng một chiều 
 Sắp xếp mảng có khóa mặc định (người dùng không thiết lập 
giá trị cho khoá): dùng hai vòng lặp for lồng nhau để sắp xếp 
Thiết kế và lập trình Web 
35 
Sắp xếp mảng một chiều 
Sắp tăng dần 
1 8 3 21 55 13 34 2 89 5 
1 8 21 55 13 3 2 89 5 
3 8 21 55 13 1 2 89 5 
34 
34 
3 8 21 55 13 1 2 89 34 5 
13 34 2 21 3 55 1 89 8 5 
Thiết kế và lập trình Web 
36 
Sắp xếp mảng một chiều 
 Sắp xếp mảng dùng vòng lặp 
– Thuật toán sắp xếp đổi chỗ hai phần tử 
<?php 
function sap_xep_mang_tang($tên_mảng) 
{ $số_phần_tử = count($tên_mảng) 
 for($i=0;$i<$số_phần_tử - 1; $i++) 
 { for($j = $i+1; $j<$số_phần_tử; $j++) 
 { 
 //sắp tăng dần 
 if($tên_mảng[$i] > $tên_mảng[$j]) 
 hoan_vi($tên_mảng[$i],$tên_mảng[$j]); 
 } 
 } 
 return $tên_mảng; 
} 
?> 
Thiết kế và lập trình Web 
37 
Sắp xếp mảng một chiều 
– Để thực hiện việc sắp xếp mảng trên cần xây dựng hai hàm hoán 
vị hai giá trị và sắp xếp mảng 
– Hàm hoán vị 
<?php 
 function hoan_vi(&$a, &$b) 
 { 
 $temp = $a; 
 $a = $b; 
 $b = $temp; 
 } 
?> 
Thiết kế và lập trình Web 
38 
Sắp xếp mảng một chiều 
 Sắp xếp mảng dùng vòng lặp 
– Ví dụ: sắp xếp mảng tăng dần và giảm dần 
<?php 
 $mang = array(8,4,1,6,5,3,7,2); 
 $mang_tang = sap_xep_mang_tang($mang); 
 echo $mang_tang; 
 → 1 2 3 4 5 6 7 8 
 $mang_giam = sap_xep_mang_giam($mang); 
 echo $mang_giam; 
 → 8 7 6 5 4 3 2 1 
?> 
Thiết kế và lập trình Web 
39 
Sắp xếp mảng một chiều 
 Sử dụng hàm sắp xếp trong thư viện mảng 
– Sắp xếp mảng (có khóa mặc định) theo giá trị của các phần tử 
• Sắp tăng dần 
Cú pháp: sort($tên_mảng) 
– Ví dụ: 
<?php 
 $mang = array(8,4,1,6,5,3,7,2); 
 echo sort($mang); 
 → 1 2 3 4 5 6 7 8 
?> 
Thiết kế và lập trình Web 
40 
Sắp xếp mảng một chiều 
 Sử dụng hàm sắp xếp trong thư viện mảng 
– Sắp xếp mảng có khóa do người dùng nhập 
• Sắp xếp theo giá trị: Dùng hàm sort() để sắp tăng và rsort() để 
sắp giảm tương tự như sắp xếp mảng có khóa mặc định 
Thiết kế và lập trình Web 
41 
Sắp xếp mảng một chiều 
 Sử dụng hàm sắp xếp trong thư viện mảng 
– Sắp xếp mảng có khóa do người dùng nhập 
• Sắp xếp theo khóa - Sắp xếp tăng dần 
Cú pháp: ksort($tên_mảng) 
– Ví dụ: 
<?php 
$trai_cay = array("d"=>"chanh", "a"=>"lê", "b"=>"chuối", "c"=>"táo"); 
ksort($trai_cay); 
foreach ($trai_cay as $khoa => $gia_tri) 
 { 
 echo "$khoa = $gia_tri \t"; 
 } 
 →a = lê b = chuối c = táo d = chanh 
?> 
Thiết kế và lập trình Web 
42 
Sắp xếp mảng một chiều 
 Sử dụng hàm sắp xếp trong thư viện mảng 
– Sắp xếp mảng có khóa do người dùng nhập 
• Sắp xếp theo khóa - Sắp xếp giảm dần 
Cú pháp: krsort($tên_mảng) 
– Ví dụ: 
<?php 
$trai_cay = array("d"=>"chanh", "a"=>"lê", "b"=>"chuối", "c"=>"táo"); 
krsort($trai_cay); 
foreach ($trai_cay as $khoa => $gia_tri) 
 { 
 echo "$khoa = $gia_tri \t"; 
 } 
 →d = chanh c = táo b = chuối a = lê 
?> 
Thiết kế và lập trình Web 
43 
Sắp xếp mảng một chiều 
 Sắp xếp mảng có khóa do người dùng tạo 
– Xây dựng hàm so sánh dùng để so sánh hai giá trị với nhau. 
– Tùy theo yêu cầu sắp xếp => sử dụng các hàm sắp xếp khác 
nhau 
Thiết kế và lập trình Web 
44 
Sắp xếp mảng một chiều 
 Sắp xếp mảng có khóa do người dùng tạo 
• Hàm so sánh: dùng để so sánh hai giá trị với nhau 
<?php 
function compare($a,$b) 
{ 
 if ($a==$b) 
 return 0; 
 if($a<$b) 
 return -1; 
 else 
 return 1; 
} 
?> 
Thiết kế và lập trình Web 
45 
Sắp xếp mảng một chiều 
Sắp xếp mảng có khóa do người dùng 
tạo 
–Sắp xếp theo giá trị của các phần tử trong 
mảng 
• Sắp tăng dần 
Cú pháp: usort($tên_mảng, “compare”) 
• Sắp giảm dần 
Cú pháp: ursort($tên_mảng, “compare”) 
Thiết kế và lập trình Web 
46 
Sắp xếp mảng một chiều 
 Sắp xếp mảng có khóa do người dùng tạo 
– Sắp xếp theo khóa của các phần tử trong mảng 
• Sắp tăng dần 
Cú pháp: uksort($tên_mảng, “compare”) 
– Ví dụ: 
<?php 
$a = array(4 => "four", 3 => "three", 20 => "twenty", 10 => "ten"); 
uksort($a, "compare"); 
foreach ($a as $key => $value) 
 { 
 echo "$key: $value\n"; 
 } 
→ 3: three 4: four 10: ten 20: twenty 
?> 
Thiết kế và lập trình Web 
50 
4. Các hàm xử lý khác trên mảng 
 Tìm kiếm trên mảng 
 Ghép mảng 
 Đếm số lần xuất hiện 
 Tạo mảng duy nhất 
 Tìm các giá trị khác nhau của một mảng so với mảng khác 
Thiết kế và lập trình Web 
51 
Tìm kiếm trên mảng: array_search() 
 Tìm kiếm một giá trị trên mảng 
– Nếu tìm thấy sẽ trả về khóa của phần tử chứa giá trị đó, nếu 
không tìm thấy sẽ trả về giá trị NULL. 
 Cú pháp: 
$khóa = array_search(giá_trị_cần_tìm, $tên_mảng); 
Thiết kế và lập trình Web 
52 
Tìm kiếm trên mảng: array_search() 
 Ví dụ: 
<?php 
$mang = array(0 => ‘xanh’, 1 => ‘đỏ’, 2 => ‘tím’, 3 => 
‘vàng’); 
$khoa_do = array_search(‘đỏ’, $mang); → 1 
$khoa_vang = array_search(‘vàng’, $mang); → 3 
?> 
Thiết kế và lập trình Web 
53 
Ghép mảng: array_merge() 
 Ghép hai hay nhiều mảng với nhau 
 Kết quả trả về là một mảng mới được tạo ra từ các mảng 
 Cú pháp: 
$mảng_ghép = array_merge($mảng_1, $mảng_2, ...); 
 Chú ý: khi các mảng dùng để ghép có khóa trùng nhau thì 
mảng ghép sẽ chỉ lấy phần tử có khóa trùng của mảng cuối 
cùng. 
Thiết kế và lập trình Web 
54 
Ghép mảng: array_merge() 
 Ví dụ: 
<?php 
 $mang1 = array("màu" => "đỏ", 2, 4); 
 $mang2 = array("a", "b", "màu" => "xanh", "hình" => "tròn", 4); 
 $mang_chung = array_merge($mang1, $mang2); 
 print_r($mang_chung); 
 → Array ( 
 [màu] => xanh [0] => 2 [1] => 4 [2] => a 
 [3] => b [hình] => tròn [4] => 4 ) 
?> 
Thiết kế và lập trình Web 
55 
Đếm số lần xuất hiện: array_count_values() 
 Đếm số lần xuất hiện của các phần tử trong mảng. 
 Kết quả trả về là một mảng mới trong đó: 
– khóa của phần tử trong mảng mới là phần tử trên mảng cần đếm 
– giá trị của phần tử trong mảng mới sẽ là số lần xuất hiện trong 
mảng cần đếm. 
 Cú pháp: 
 $mảng_slxh = array_count_values($tên_mảng); 
Thiết kế và lập trình Web 
56 
Đếm số lần xuất hiện: array_count_values() 
 Ví dụ: 
<?php 
 $mang = array(1, "hello", 1, "world", "hello", 2, "Xin chào", 1); 
 $mang_slxh = array_count_values($mang); 
 print_r($mang_slxh); 
 → Array ( 
 [1] => 3 
 [hello] => 2 
 [world] => 1 
 [2] => 1 
 [Xin chào] => 1 ) 
?> 
Thiết kế và lập trình Web 
57 
Tạo mảng duy nhất: array_unique() 
 Hàm này sẽ bỏ đi những giá trị lặp lại trong mảng. 
 Kết quả trả về là một mảng mới mà trong đó mỗi phần tử 
trong mảng chỉ xuất hiện một lần. 
 Cú pháp: 
 $mảng_duy_nhất = array_unique($tên_mảng); 
Thiết kế và lập trình Web 
58 
Tạo mảng duy nhất: array_unique() 
 Ví dụ: 
<?php 
 $mang = array(1,3,1,2,5,1,3,4); 
 $mang_duy_nhat= array_unique($mang); 
 → 1, 3, 2, 5, 4 
?> 
Thiết kế và lập trình Web 
59 
Tìm các giá trị khác nhau của một mảng so với 
mảng khác: array_diff() 
 So sánh giữa hai mảng và lọc ra những phần tử chỉ có trong 
mảng thứ nhất mà không có trong mảng thứ hai. 
 Kết quả trả về là một mảng mới với những phần tử chỉ xuất 
hiện duy nhất trong mảng một. 
 Cú pháp: 
 array_diff($tên_mảng_1, $tên_mảng_2); 
Thiết kế và lập trình Web 
60 
Tìm các giá trị khác nhau của một mảng so với 
mảng khác: array_diff() 
 Ví dụ: 
<?php 
 $mang_1 = array("a" => "xanh", "đỏ", "tím", "vàng"); 
 $mang_2 = array("b" => "xanh", "vàng", "đỏ"); 
 $mang_con_1 = array_diff($mang_1, $mang_2); 
 print_r($mang_con_1); 
 → Array ( [1] => tím ) 
?> 
Thiết kế và lập trình Web 
61 
Quizes 
–Hãy cho biết kết quả khi thực hiện đoạn 
script PHP sau đây? 
<?php 
$array = array (0.1 => 'a', 0.2 => 'b'); 
echo count ($array); 
?> 
Thiết kế và lập trình Web 
62 
Quizes 
– Trang “testscript.php” được xây dựng như sau, hãy cho biết 
khi người dùng truy nhập với địa chỉ truy nhập trên trình 
duyệt là “” thì kết quả 
thu được là gì? 
<?php 
function process($c, $d = 25) 
{ 
 global $e; 
 $retval = $c + $d - $_GET['c'] - $e; 
 return $retval; 
} 
$e = 10; 
echo process(5); 
?> 
Thiết kế và lập trình Web 
63 
Bài tập 
 Xây dựng đoạn mã PHP thực hiện: 
Thiết kế và lập trình Web 
64 
Quizes 
–Hãy cho biết kết quả khi thực hiện đoạn 
script PHP sau đây? 
<?php 
$array = array (true => 'a', 1 => 'b'); 
print_r ($array); 
?> 
Thiết kế và lập trình Web 
65 
Quizes 
–Hãy cho biết kết quả khi thực hiện đoạn 
script PHP sau đây? 
<?php 
$dog = "Dogzilla"; 
$dragon = &$dog; 
$dragon = "Dragonzilla"; 
echo $dog . " " . $dragon; 
?> 
Thiết kế và lập trình Web 
66 
Quizes 
–Hãy cho biết kết quả khi thực hiện đoạn 
script PHP sau đây? 
<?php 
define(myvalue, "10"); 
$myarray[10] = "Dog"; 
$myarray[] = "Human"; 
$myarray['myvalue'] = "Cat"; 
$myarray["Dog"] = "Cat"; 
print "The value is: "; 
print $myarray[myvalue].""; 
?> 

File đính kèm:

  • pdfbai_giang_thiet_ke_va_lap_trinh_web_bai_6_thao_tac_tren_mang.pdf