LAB 4: MNG TRONG PHP
1. Mc tiêu
- Nm vng cu trúc mng trong php.
- S dng thành tho các thao tác trên mng: to mng, thêm - xóa phn t, truy
xut d liu trong mng, duyt mảng,…
- S dng mt s hàm thông dng v mng trong PHP
2. Tóm tt lý thuyết
- Mng biến cha nhiu phn t. Trong php, các phn t th kiu d liu
khác nhau. Mi phn t ca mng 2 thành phn: index value. Index ca
mng có th là các s nguyên hay chui. Value ca phn t mng thgiá tr
ca bt c kiu d liu nào, thm chí là mt mng (mng nhiu chiu). Mt phn
t value trong mng có th có kiu d liu khác vi các phn t khác.
- To mng: s dng hàm array().
$a = array();//mng $a rng
$b = array(1, 3, 5); // Mng $b có 3 phn t
Mng $b có 3 phn t có index và value lần lượt là: 0,1, 21, 3, 5. Vi mng
không xác định index cho các phn t như thế này, php s to mng có index
các s nguyên và bắt đầu t index là 0.
Tc là: : $b[0] = 1;
: $b[1] = 3;
: $b[2] = 5;
$c = array("x1"=>2, "x2 "=>4, "x3 "=>6);
Mng $c có 3 phn t có index và value lần lượt là: x1, x2, x3 và 2, 4, 6
Tc là : $c["x1"] = 2;
: $c["x2"] = 4;
: $c["x4"] = 6;
- Để debug xem cu trúc và ni dung mt mng, ta s dng hàm print_r hay
var_dump.
print_r($b); var_dump($c);
- Mng nhiu chiu: Là mng mà giá tr ca phn t mng là mt mng khác.
Ví d:
<?php
$a = array(1, 3, 5); $b = array("x1"=>2, "x2"=>4);
$c = array($a, $b); $d = array(); $d[] = $a; $d[] = $b;
print_r($c);
print_r($d);
$v1 = $d[1]["x2"]; //$v1=4
$v2 = $c[0]; $v3 = $v2[2]; // $v2 = 5
?>
Kết qu:
Array
(
[0] => Array
(
[0] => 1
[1] => 3
[2] => 5
)
[1] => Array
(
[x1] => 2
[x2] => 4
)
)
Array
(
[0] => Array
(
[0] => 1
[1] => 3
[2] => 5
)
[1] => Array
(
[x1] => 2
[x2] => 4
)
)
- Các thao tác trên mng:
o Truy xut ti mt phn t: s dng toán t []. Ví d: $v = $b[1]
o Để kim tra mt index có trong mng hay không, ta s dng hàm isset.
Ví d:
<?php
if (isset($c["x1"]) $c["x1"] +=2;
?>
o Để thêm phn t mi: s dng lnh gán d liu cho phn t này trong
mng.
$b[3] = 5; //To phn t $b[3] (nếu chưa có) gán giá tr bng 5.
Nếu $b[3] đã có, thay đổi ni dung ca $b[3] bng 5.
Hoc $b[] = 6; Php t động to phn t $b[4] gán giá tr 6 nếu
mng $b mi chcác phn t như trên ($b[0], $b[1], $b[2], $b[3])
chưa có phần t $b[4].
o Để xóa phn t trong mng: s dng hàm unset(). Unset($b[2]);
o Duyt qua mng: có th s dng vòng lp for hay foreach.
i. Vòng lp for: s dng cho các mng các ch s nguyên liên tc
(ví d mng $b trên sau khi chưa xóa phần t).
for($i=0; $i< Count($b); $i++)
echo $b[$i];
ii. Vòng lp foreach: Đưc s dng duyt qua tt c các loi mng:
mng index s nguyên liên tc hay không liên tc, hoc index
chui. Mi ln lp, vòng lp s duyt qua mt phn t ca mng
và gán d liu (index hay value) cho các biến ta đưa vào.
Foreach($c as $value)
{
//x biến cha giá tr ca mng là $value
}
Foreach($c as $key => $value)
{
/* x biến cha index value ca phn t đang
duyt qua là $key và $value */
}
- Các hàm hay s dng trên mng:
o Count: tr v s phn t ca mng. $n = Count($b);
o In_array(): kim tra mt giá tr có trong mng hay không.
<?php
$ext = "jpg"; $arr = array("jpg", "bmp", "gif");
If (in_array($ext, $arr)) echo “Đây là phn m rng của file hình”;
Else echo “Không phải”;
?>
o Is_array(): Kim tra mt biến có phi là mt biến mng hay không.
o Array_rand(): Ly ngu nhiên mt s phn t trong mng.
mixed array_rand ( array $array [, int $num = 1 ] ).
$array: mảng được ly giá tr. $num: s phn t cn ly.
Nếu $num=1: kết qu tr v ch s ca phn t cn ly.
Nếu $num>1: Tr v mng các ch s cn ly.
<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
?>
o sort, asort: sp xếp mng.
bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ):
sp xếp li mt mng theo giá tr tang dn.
$array: mng cn sp xếp
$sort_flags: Cách so sánh khi sp xếp: c giá tr hay s
dng sau:
SORT_REGULAR So sánh không thay đổi kiu d liu
SORT_NUMERIC So sánh theo dng s
SORT_STRING So sánh các phn t theo dng chui
bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] ):
Sp xếp các giá tr ca mng gi nguyên index. m tr v
true/false nếu thành công hay không.
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana",
"c" => "apple");
asort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>
Kết qu:
c = apple
b = banana
d = lemon
a = orange
o Array_sum(): tính tng các giá tr s ca các phn t trong mng
number array_sum ( array $array );
<?php
$a = array(2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "\n";
$b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);
echo "sum(b) = " . array_sum($b) . "\n";
?>
Kết qu:
sum(a) = 20
sum(b) = 6.9
3. Ví d
3.1 Ví d lab4_1.php: To mng, xem ni dung ca mng bng các hàm print_r
và var_dump, thêm mt phn t, xóa và kim tra mt phn t có tn ti hay
không.
3.2 Ví d lab4_2.php . Duyt qua mng mt chiu s dng vòng lp foreach.
3.3 Ví d lab4_3.php S dng mt sm trên mng mt chiu:
a. array_rand : ly mt s phn t ngu nhiên trong mng
b. sort, asort: sp xếp mng
c. array_sum: tính tng các giá tr trong mng
3.4 Ví d lab4_4.php: Làm vic trên mng nhiu chiu.
a. To mng
b. Truy xut phn t trong mng
c. Duyt mng
4. Vn dng
4.1 Sa li lab4_1.php, kim tra xem mt phn t nào đó có trong mảng không,
nếu có, y xóa hoc thay đổi d liu ca phn t y s dng m
print_r() in mảng sau khi thay đổi ra màn hình.
4.2 T lab4_2.php, hãy sa code li đ:
a. Đếm s phn t có giá tr dương của mng $a.
b. To mng mới, lưu các phn t dương trong mảng $b. d, mng $c
được to thành t mng $b ban đầu có giá tr như sau:
$c = array("a"=>2, "b"=>4)
4.3 Trong d lab4_3.php: y tìm s dng các m để sp xếp mng theo
chiu gim dn.
5. Nâng cao
5.1 Xây dng mt hàm php in ra mng mt chiu và hin th trên trình duyt
web theo dng bng HTML. To mng và gi hàm va to.
function showArray($arr)
{
//code in bng html t mng mt chiu $arr
}