Cũng như bao ngôn ngữ lập trình khác. PHP cũng tồn tại một loại dữ liệu được gọi là mảng. Cụ thể hơn Mảng là 1 biến danh sách. Nghĩa là, một biến vốn chứa nhiều phần tử được tạo bởi các số hoặc chuỗi. Nó cho phép chúng ta lưu trữ, sắp xếp thứ tự và truy cập nhiều giá trị với một tên. Và cần lưu ý rằng một phần tử mảng luôn bắt đầu với giá trị là 0.
Trang 1www.zend.vn Zend Framework! Programming
Shopping application
K thu t x lý m ng
M ng (Array) là m t thành ph n r t quan tr ng b t k ngôn ng l p trình nào Thông
th ng khi l p trình web v i PHP thu n chúng ta r t ít khi đ ý đ n k thu t x lý m ng
đi u đó đã làm h n ch s linh ho t c a ng d ng
i v i các ng d ng đ c xây d ng trên n n Zend Framework, n u chúng ta không x
d ng t t m ng thì th t s s khó kh n đ chúng ta có th t i u mã c a ch ng trình và giúp cho ng d ng c a chúng ta ch y nhanh đ c
Chính vì v y trong bài này chúng ta s h c cách x lý m ng cho m i tình hu ng đ nâng cao kh n ng ng d ng m ng vào Zend Framework
Giáo trình: Zend Framework! Programming (v2.2)
Chuyên đ : Shopping application
Biên so n: Ph m V Khánh Email: vukhanh2212@gmail.com
i n tho i: 0908.893326 Website: www.zend.vn
C p nh t: 07-2010
Trang 2w
w
.ze
n
d
.vn
M ng là gì?
Bi n là m t n i đ l u tr s ho c ch V n đ là, bi n ch có th l u tr m t giá tr duy
nh t Còn m ng là m t bi n đ c bi t, nó có th l u tr nhi u giá tr trong m t bi n duy
nh t
Ví d : Chúng ta ch có th l u tr m t tên c a nhân viên trong m t bi n Nh ng đ i v i
m ng chúng ta có th l u tr hàng ngàn tên nhân viên khác nhau
<?php $employee_1 = 'Nguy n V n A';
$employee = array();
$employee[] = 'Nguy n V n A';
$employee[] = 'Nguy n V n B';
?>
M ng có th l u tr t t c các giá tr bi n c a b n d i m t tên duy nh t Và b n có th truy c p giá tr b ng cách tham chi u đ n tên m ng M i ph n t m ng có ch s riêng (index) đ chúng ta có th truy c p chúng m t cách d dàng
Trong PHP có 3 lo i m ng: M ng s nguyên (Numeric array), Associative array, Multidimensional array
1 M ng s nguyên
M ng s nguyên là m ng có ch s (index or key) là d ng s Chúng ta th ng g i
m ng này là m ng liên t c Có 2 cách đ t o ra m t m ng s nguyên
Ví d 1:
$cars=array("Saab","Volvo","BMW","Toyota");
Ví d 2:
$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
In m t ph n t trong m ng:
$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
echo $cars[3] "<br>";
echo $cars[0] " and " $cars[1] " are Swedish cars.";
In t t c các ph n t trong m ng
$cars[0] = "Saab";
$cars[1] = "Volvo";
$cars[2] = "BMW";
$cars[3] = "Toyota";
for ($i = 0; $i <= count($cars); $i++) {
Trang 3w
w
.ze
n
d
.vn
echo $cars[$i] "<br>";
}
2 M ng k t h p
M ng k t h p là m t m ng mà ch s (index or key) là m t giá tr , ch s có th là chu i
ho c s Khi l u tr d li u vào các ph n t m ng, các ph n t đó đ c đ t tên c th
M ng k t h p là m t s b ng xung c n thi t cho thành ph n m ng trong PHP vì có nhi u
v n đ m ng s nguyên không th gi i quy t đ c h t Chúng ta th ng g i là m ng không liên t c
Ví d 1:
$ages = array("Tuan"=>32, "Quang"=>30, "Long"=>34);
Ví d 2:
$ages["Tuan"] = 32;
$ages["Quang"] = 30;
$ages["Long"] = 34;
In m t ph n t trong m ng
$ages["Tuan"] = 32;
$ages["Quang"] = 30;
$ages["Long"] = 34;
echo $ages["Tuan"];
In t t c các ph n t trong m ng
$ages["Tuan"] = 32;
$ages["Quang"] = 30;
$ages["Long"] = 34;
foreach($ages as $key => $value){
echo "<br>" $key " : " $value;
}
3 M ng đa chi u
M ng đa chi u là m ng mà m i ph n t trong m ng chính có th là m t m ng và m i
ph n t trong m ng con c ng có th là m t m ng Chúng ta th ng g i là m ng l ng
Ví d :
$students["SV001"] = array('id'=>1, 'name'=>'Tu n', 'age'=> 18, 'points'=>array(10,5,8) );
$students["SV002"] = array('id'=>1, 'name'=>'Tu n', 'age'=> 18, 'points'=>array(10,5,8) );
$students["SV003"] = array('id'=>1, 'name'=>'Tu n', 'age'=> 18, 'points'=>array(10,5,8) );
Trang 4w
w
.ze
n
d
.vn
In ph n t trong m ng:
<?php
$students["SV001"] = array('id'=>1, 'name'=>'Tu n', 'age'=> 18, 'points'=>array(10,5,8) );
$students["SV002"] = array('id'=>1, 'name'=>'Tu n', 'age'=> 18, 'points'=>array(10,5,8) );
$students["SV003"] = array('id'=>1, 'name'=>'Tu n', 'age'=> 18, 'points'=>array(10,5,8) );
echo $students["SV003"]['name'] '<br>';
echo $students["SV003"]['age'] '<br>';
?>
4 Xem c u trúc m ng
có th thao tác t t trên m t m ng b t k chúng ta ph i đ c đ c c u trúc m ng Trong
th c t đ đ c c u trúc m ng, đ i t ng, bi n toàn c c c a m t h th ng … các l p trình viên PHP th ng dùng kh i l nh sau:
echo '<pre>';
print_r($ten_mang);
echo '</pre>';
Ví d : n u chúng ta in ra m ng $students m c 3 chúng ta s đ c nh sau:
Array ( [SV001] => Array (
[id] => 1 [name] => Tu n [age] => 18 [points] => Array (
[0] => 10 [1] => 5 [2] => 8 )
) [SV002] => Array (
[id] => 1 [name] => Tu n [age] => 18 [points] => Array (
[0] => 10 [1] => 5 [2] => 8 )
)
Trang 5w
w
.ze
n
d
.vn
[SV003] => Array (
[id] => 1 [name] => Tu n [age] => 18 [points] => Array (
[0] => 10 [1] => 5 [2] => 8 )
) )
5 Bài t p m ng
x lý t t m ng chúng ta c n ph i th c hi n nhi u bài t p v i m ng đa chi u đi u này giúp chúng ta nâng cao kh n ng x lý m ng
Bài t p 1: Xây d ng hàm đ a d li u trong b ng groups vào trong selectbox
<?php
$con = mysql_connect('localhost', 'root', '');
mysql_select_db('zf05', $con);
$sql = 'SELECT * FROM user_group';
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) { $newArray[$row['id']] = $row['group_name'];
} echo formSelect('group', null, $newArray);
function formSelect($name, $value = null, $option = null, $attri = null) { $xhtml = '<select id="' $name '" name="' $name '">';
foreach ($option as $key => $val) { $xhtml = '<option value="' $key '">' $val '</option>';
} $xhtml = '</select>';
return $xhtml;
}
?>
Bài t p 2: Nh p 2 m ng thành m t m ng duy nh t theo c u trúc đ c yêu c u
<?php
$group[] = array('id' => 1, 'name' => 'Admin');
$group[] = array('id' => 2, 'name' => 'Manager');
$group[] = array('id' => 3, 'name' => 'Member');
$member[] = array('id' => 1, 'username' => 'Nguyen Van A', 'group_id' => 1);
$member[] = array('id' => 2, 'username' => 'Nguyen Van B', 'group_id' => 1);
$member[] = array('id' => 3, 'username' => 'Nguyen Van C', 'group_id' => 1);
$member[] = array('id' => 4, 'username' => 'Nguyen Van D', 'group_id' => 2);
$member[] = array('id' => 5, 'username' => 'Nguyen Van E', 'group_id' => 2);
$member[] = array('id' => 6, 'username' => 'Nguyen Van F', 'group_id' => 2);
$member[] = array('id' => 7, 'username' => 'Nguyen Van G', 'group_id' => 3);
$member[] = array('id' => 8, 'username' => 'Nguyen Van H', 'group_id' => 3);
$member[] = array('id' => 8, 'username' => 'Nguyen Van I', 'group_id' => 3);
$newArray = array();
Trang 6w
w
.ze
n
d
.vn
foreach ($group as $key => $val) { $newArray[$val['name']] = array();
foreach ($member as $key1 => $info) {
if ($val['id'] == $info['group_id']) { $newArray[$val['name']][] = $info;
} } }
echo '<pre>';
print_r($newArray);
echo '</pre>';
?>
6 Các hàm x lý m ng h u ích
6.1 Hàm print_r()
print_r ( array &$array ): In m ng $array ra, ch y u dùng đ debug
$ages["Tuan"] = 32;
$ages["Quang"] = 30;
$ages["Long"] = 34;
echo '<pre>';
print_r($ages);
echo '</pre>';
6.2 Hàm count()
int count ( array &$array ): Tr v gí tr ki u s nguyên là s ph n t c a m ng $array
$ages["Tuan"] = 32;
$ages["Quang"] = 30;
$ages["Long"] = 34;
count($ages);
6.3 Hàm array_values():
array array_values ( array &$array ): Tr v m t m ng liên t c bao g m các ph n t có giá tr là giá tr l y t các ph n t c a m ng $array
Ví d :
<?php
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
?>
Hi n th :
Array ( [0] => XL [1] => gold )
Trang 7w
w
.ze
n
d
.vn
6.4 Hàm array_keys():
array array_keys ( array &$array ): Tr v m t m ng liên t c bao g m các ph n t có giá
tr là khóa (key) l y t các ph n t c a m ng $array
Ví d :
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));
$array = array("color" => array("blue", "red", "green"), "size" => array("small", "medium", "large"));
print_r(array_keys($array));
Hi n th :
Array ( [0] => 0 [1] => color )
Array ( [0] => 0 [1] => 3 [2] => 4 )
Array ( [0] => color [1] => size )
6.5 Hàm array_pop():
mixed array_pop ( array &$array ): Lo i b ph n t cu i cùng c a m ng $array Hàm tr
v ph n t cu i cùng đã đ c lo i b
Ví d :
<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
print_r($stack);
?>
Hi n th :
Array ( [0] => orange [1] => banana [2] => apple )
6.6 Hàm array_push():
Trang 8w
w
.ze
n
d
.vn
int array_push ( array &$array , mixed $var [, mixed $ ] ): a thêm 1 ho c nhi u ph n
t vào cu i m ng $array Hàm tr v ki u s nguyên là s l ng ph n t c a m ng $array
m i
Ví d :
<?php
$stack = array("orange", "banana");
array_push($stack, "apple", "raspberry");
print_r($stack);
?>
Hi n th :
Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry )
6.7 Hàm array_shif():
mixed array_shift ( array &$array ): Lo i b ph n t đ u tiên c a m ng $array Hàm tr
v ph n t đ u tiên đã đ c lo i b
Ví d :
<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack);
?>
Hi n th :
Array ( [0] => banana [1] => apple [2] => raspberry )
6.8 Hàm array_unshif():
int array_unshift ( array &$array , mixed $var [, mixed $ ] ): a thêm 1 ho c nhi u
ph n t vào v trí đ u m ng Hàm tr v ki u s nguyên là s l ng ph n t c a m ng
$array m i
Ví d :
<?php
$queue = array("orange", "banana");
array_unshift($queue, "apple", "raspberry");
print_r($queue);
?>
Hi n th :
Array
Trang 9w
w
.ze
n
d
.vn
( [0] => apple [1] => raspberry [2] => orange [3] => banana )
6.9 Hàm list():
array list ( mixed $varname [, mixed $ ] ) = $arrValue: ây là m t c u trúc ngôn ng
đ c dùng đ gán giá tr cho m t danh sách các bi n Giá tr đ c l y tu n t t t p h p các ph n t tu n t c a m ng đ c gán $arrValue (t c là không l y các ph n t có khóa (key))
Ví d :
<?php
$info = array('coffee', 'brown', 'caffeine');
// Listing all the variables list($drink, $color, $power) = $info;
echo '<br>' "$drink is $color and $power makes it special.\n";
// Listing some of them list($drink, , $power) = $info;
echo '<br>' "$drink has $power.\n";
// Or let's skip to only the third one list( , , $power) = $info;
echo '<br>' "I need $power!\n";
// list() doesn't work with strings list($bar) = "abcde";
var_dump($bar); // NULL
?>
Hi n th
coffee is brown and caffeine makes it special
coffee has caffeine
I need caffeine!
NULL
Ví d :
$info = array('coffee', 'brown', 'caffeine');
list($a[0], $a[1], $a[2]) = $info;
echo '<pre>';
print_r($a);
echo '</pre>';
Hi n th
Array ( [2] => caffeine [1] => brown [0] => coffee )
6.10 Hàm array_flip():
Trang 10w
w
.ze
n
d
.vn
array array_flip ( array $array ): Tr v m t m ng có khóa và giá tr đ c hoán đ i cho nhau so v i m ng $array (giá tr thành khóa và khóa thành giá tr )
Ví d :
$trans = array("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip($trans);
echo '<pre>';
print_r($trans);
echo '</pre>';
Hi n th :
Array ( [1] => b [2] => c )
6.11 Hàm sort()
bool sort ( array &$array ): S p xép m ng $array theo giá tr t ng d n
Ví d :
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
echo '<pre>';
print_r($fruits);
echo '</pre>';
Hi n th
Array ( [0] => apple [1] => banana [2] => lemon [3] => orange )
6.12 Hàm array_reverse()
array array_reverse ( array $array ): o ng c v trí các ph n t c a m ng, ph n t cu i cùng tr thành ph n t đ u tiên, ph n t k cu i thành ph n t th nhì,
Ví d :
$fruits = array("lemon", "orange", "banana", "apple");
$result = array_reverse($fruits);
echo '<pre>';
print_r($result);
echo '</pre>';
Hi n th
Array ( [0] => apple [1] => banana [2] => orange
Trang 11w
w
.ze
n
d
.vn
[3] => lemon )
6.13 Hàm array_merge()
array array_merge ( array $array1 [, array $array2 [, array $ ]] ): Nh p 2 hay nhi u
m ng thành 1 m ng duy nh t và tr v m ng m i
Ví d :
$fruits_1 = array("lemon", "orange");
$fruits_2 = array("banana", "apple");
$result = array_merge($fruits_1,$fruits_2);
echo '<pre>';
print_r($result);
echo '</pre>';
Hi n th :
Array ( [0] => lemon [1] => orange [2] => banana [3] => apple )
6.14 Hàm array_rand()
mixed array_rand ( array $input [, int $num_req = 1 ] ): L y ng u nhiên ra 1 ho c ho c nhi u ph n t m ng sau đó đ a vào m t m ng m i
Ví d :
$fruits = array("lemon", "orange", "banana", "apple");
$rand_keys = array_rand($fruits, 2);
echo '<pre>';
print_r($rand_keys);
echo '</pre>';
Hi n th :
Array ( [0] => 3 [1] => 2 )
6.15 array_search()
mixed array_search ( mixed $needle , array $array ): Tìm giá tr trong m ng $array Hàm
tr v khóa (key) c a ph n t tìm đ c
Ví d :
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array); // $key = 1;