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.
www.zend.vn Giáo trình: Zend Framework! (v 2.2) o to lp trình viên chuyên nghip Phn 1: K thut x lý mng http://www.zend.vn Ging viên: Phm V Khánh 1 Email: vukhanh2212@gmail.com Zend Framework! Programming Shopping application K thut x lý mng Mng (Array) là mt thành phn rt quan trng bt k ngôn ng lp trình nào. Thông thng khi lp trình web vi PHP thun chúng ta rt ít khi đ ý đn k thut x lý mng điu đó đã làm hn ch s linh hot ca ng dng. i vi các ng dng đc xây dng trên nn Zend Framework, nu chúng ta không x dng tt mng thì tht s s khó khn đ chúng ta có th ti u mã ca chng trình và giúp cho ng dng ca chúng ta chy nhanh đc. Chính vì vy trong bài này chúng ta s hc cách x lý mng cho mi tình hung đ nâng cao kh nng ng dng mng vào Zend Framework. Giáo trình: Zend Framework! Programming (v2.2) Chuyên đ: Shopping application Biên son: Phm V Khánh Email: vukhanh2212@gmail.com in thoi: 0908.893326 Website: www.zend.vn Cp nht: 07-2010 www.zend.vn Giáo trình: Zend Framework! (v 2.2) o to lp trình viên chuyên nghip Phn 1: K thut x lý mng http://www.zend.vn Ging viên: Phm V Khánh 2 Email: vukhanh2212@gmail.com Mng là gì? Bin là mt ni đ lu tr s hoc ch. Vn đ là, bin ch có th lu tr mt giá tr duy nht. Còn mng là mt bin đc bit, nó có th lu tr nhiu giá tr trong mt bin duy nht. Ví d: Chúng ta ch có th lu tr mt tên ca nhân viên trong mt bin. Nhng đi vi mng chúng ta có th lu tr hàng ngàn tên nhân viên khác nhau. <?php $employee_1 = 'Nguyn Vn A'; $employee = array(); $employee[] = 'Nguyn Vn A'; $employee[] = 'Nguyn Vn B'; ?> Mng có th lu tr tt c các giá tr bin ca bn di mt tên duy nht. Và bn có th truy cp giá tr bng cách tham chiu đn tên mng. Mi phn t mng có ch s riêng (index) đ chúng ta có th truy cp chúng mt cách d dàng. Trong PHP có 3 loi mng: Mng s nguyên (Numeric array), Associative array, Multidimensional array. 1. Mng s nguyên Mng s nguyên là mng có ch s (index or key) là dng s. Chúng ta thng gi mng này là mng liên tc. Có 2 cách đ to ra mt mng 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 mt phn t trong mng: $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 tt c các phn t trong mng $cars[0] = "Saab"; $cars[1] = "Volvo"; $cars[2] = "BMW"; $cars[3] = "Toyota"; for ($i = 0; $i <= count($cars); $i++) { www.zend.vn Giáo trình: Zend Framework! (v 2.2) o to lp trình viên chuyên nghip Phn 1: K thut x lý mng http://www.zend.vn Ging viên: Phm V Khánh 3 Email: vukhanh2212@gmail.com echo $cars[$i] . "<br>"; } 2. Mng kt hp Mng kt hp là mt mng mà ch s (index or key) là mt giá tr, ch s có th là chui hoc s. Khi lu tr d liu vào các phn t mng, các phn t đó đc đt tên c th. Mng kt hp là mt s bng xung cn thit cho thành phn mng trong PHP vì có nhiu vn đ mng s nguyên không th gii quyt đc ht. Chúng ta thng gi là mng không liên tc. Ví d 1: $ages = array("Tuan"=>32, "Quang"=>30, "Long"=>34); Ví d 2: $ages["Tuan"] = 32; $ages["Quang"] = 30; $ages["Long"] = 34; In mt phn t trong mng $ages["Tuan"] = 32; $ages["Quang"] = 30; $ages["Long"] = 34; echo $ages["Tuan"]; In tt c các phn t trong mng $ages["Tuan"] = 32; $ages["Quang"] = 30; $ages["Long"] = 34; foreach($ages as $key => $value){ echo "<br>" . $key . " : " . $value; } 3. Mng đa chiu Mng đa chiu là mng mà mi phn t trong mng chính có th là mt mng và mi phn t trong mng con cng có th là mt mng. Chúng ta thng gi là mng lng. Ví d: $students["SV001"] = array('id'=>1, 'name'=>'Tun', 'age'=> 18, 'points'=>array(10,5,8) ); $students["SV002"] = array('id'=>1, 'name'=>'Tun', 'age'=> 18, 'points'=>array(10,5,8) ); $students["SV003"] = array('id'=>1, 'name'=>'Tun', 'age'=> 18, 'points'=>array(10,5,8) ); www.zend.vn Giáo trình: Zend Framework! (v 2.2) o to lp trình viên chuyên nghip Phn 1: K thut x lý mng http://www.zend.vn Ging viên: Phm V Khánh 4 Email: vukhanh2212@gmail.com In phn t trong mng: <?php $students["SV001"] = array('id'=>1, 'name'=>'Tun', 'age'=> 18, 'points'=>array(10,5,8) ); $students["SV002"] = array('id'=>1, 'name'=>'Tun', 'age'=> 18, 'points'=>array(10,5,8) ); $students["SV003"] = array('id'=>1, 'name'=>'Tun', 'age'=> 18, 'points'=>array(10,5,8) ); echo $students["SV003"]['name'] . '<br>'; echo $students["SV003"]['age'] . '<br>'; ?> 4. Xem cu trúc mng có th thao tác tt trên mt mng bt k chúng ta phi đc đc cu trúc mng. Trong thc t đ đc cu trúc mng, đi tng, bin toàn cc ca mt h thng … các lp trình viên PHP thng dùng khi lnh sau: echo '<pre>'; print_r($ten_mang); echo '</pre>'; Ví d: nu chúng ta in ra mng $students mc 3 chúng ta s đc nh sau: Array ( [SV001] => Array ( [id] => 1 [name] => Tun [age] => 18 [points] => Array ( [0] => 10 [1] => 5 [2] => 8 ) ) [SV002] => Array ( [id] => 1 [name] => Tun [age] => 18 [points] => Array ( [0] => 10 [1] => 5 [2] => 8 ) ) www.zend.vn Giáo trình: Zend Framework! (v 2.2) o to lp trình viên chuyên nghip Phn 1: K thut x lý mng http://www.zend.vn Ging viên: Phm V Khánh 5 Email: vukhanh2212@gmail.com [SV003] => Array ( [id] => 1 [name] => Tun [age] => 18 [points] => Array ( [0] => 10 [1] => 5 [2] => 8 ) ) ) 5. Bài tp mng x lý tt mng chúng ta cn phi thc hin nhiu bài tp vi mng đa chiu điu này giúp chúng ta nâng cao kh nng x lý mng Bài tp 1: Xây dng hàm đa d liu trong bng 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 tp 2: Nhp 2 mng thành mt mng duy nht theo cu trúc đc yêu cu <?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(); www.zend.vn Giáo trình: Zend Framework! (v 2.2) o to lp trình viên chuyên nghip Phn 1: K thut x lý mng http://www.zend.vn Ging viên: Phm V Khánh 6 Email: vukhanh2212@gmail.com 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ý mng hu ích 6.1 Hàm print_r() print_r ( array &$array ): In mng $array ra, ch yu 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 kiu s nguyên là s phn t ca mng $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 mt mng liên tc bao gm các phn t có giá tr là giá tr ly t các phn t ca mng $array Ví d: <?php $array = array("size" => "XL", "color" => "gold"); print_r(array_values($array)); ?> Hin th: Array ( [0] => XL [1] => gold ) www.zend.vn Giáo trình: Zend Framework! (v 2.2) o to lp trình viên chuyên nghip Phn 1: K thut x lý mng http://www.zend.vn Ging viên: Phm V Khánh 7 Email: vukhanh2212@gmail.com 6.4 Hàm array_keys(): array array_keys ( array &$array ): Tr v mt mng liên tc bao gm các phn t có giá tr là khóa (key) ly t các phn t ca mng $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)); Hin 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 ): Loi b phn t cui cùng ca mng $array. Hàm tr v phn t cui cùng đã đc loi b. Ví d: <?php $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_pop($stack); print_r($stack); ?> Hin th: Array ( [0] => orange [1] => banana [2] => apple ) 6.6 Hàm array_push(): www.zend.vn Giáo trình: Zend Framework! (v 2.2) o to lp trình viên chuyên nghip Phn 1: K thut x lý mng http://www.zend.vn Ging viên: Phm V Khánh 8 Email: vukhanh2212@gmail.com int array_push ( array &$array , mixed $var [, mixed $ ] ): a thêm 1 hoc nhiu phn t vào cui mng $array. Hàm tr v kiu s nguyên là s lng phn t ca mng $array mi Ví d: <?php $stack = array("orange", "banana"); array_push($stack, "apple", "raspberry"); print_r($stack); ?> Hin th: Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry ) 6.7 Hàm array_shif(): mixed array_shift ( array &$array ): Loi b phn t đu tiên ca mng $array. Hàm tr v phn t đu tiên đã đc loi b. Ví d: <?php $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_shift($stack); print_r($stack); ?> Hin 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 hoc nhiu phn t vào v trí đu mng. Hàm tr v kiu s nguyên là s lng phn t ca mng $array mi Ví d: <?php $queue = array("orange", "banana"); array_unshift($queue, "apple", "raspberry"); print_r($queue); ?> Hin th: Array www.zend.vn Giáo trình: Zend Framework! (v 2.2) o to lp trình viên chuyên nghip Phn 1: K thut x lý mng http://www.zend.vn Ging viên: Phm V Khánh 9 Email: vukhanh2212@gmail.com ( [0] => apple [1] => raspberry [2] => orange [3] => banana ) 6.9 Hàm list(): array list ( mixed $varname [, mixed $ ] ) = $arrValue: ây là mt cu trúc ngôn ng đc dùng đ gán giá tr cho mt danh sách các bin. Giá tr đc ly tun t t tp hp các phn t tun t ca mng đc gán $arrValue (tc là không ly các phn 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 ?> Hin 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>'; Hin th Array ( [2] => caffeine [1] => brown [0] => coffee ) 6.10 Hàm array_flip(): www.zend.vn Giáo trình: Zend Framework! (v 2.2) o to lp trình viên chuyên nghip Phn 1: K thut x lý mng http://www.zend.vn Ging viên: Phm V Khánh 10 Email: vukhanh2212@gmail.com array array_flip ( array $array ): Tr v mt mng có khóa và giá tr đc hoán đi cho nhau so vi mng $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>'; Hin th: Array ( [1] => b [2] => c ) 6.11 Hàm sort() bool sort ( array &$array ): Sp xép mng $array theo giá tr tng dn Ví d: $fruits = array("lemon", "orange", "banana", "apple"); sort($fruits); echo '<pre>'; print_r($fruits); echo '</pre>'; Hin th Array ( [0] => apple [1] => banana [2] => lemon [3] => orange ) 6.12 Hàm array_reverse() array array_reverse ( array $array ): o ngc v trí các phn t ca mng, phn t cui cùng tr thành phn t đu tiên, phn t k cui thành phn t th nhì, Ví d: $fruits = array("lemon", "orange", "banana", "apple"); $result = array_reverse($fruits); echo '<pre>'; print_r($result); echo '</pre>'; Hin th Array ( [0] => apple [1] => banana [2] => orange [...]... ): Tr khác nhau v à $array2 Ví d $array1 = array( "a" => "green", "red", "blue", "red"); $array2 = array( "b" => "green", "yellow", "red"); $result = array_ diff( $array1 , $array2 ); echo ''; print_r($result); echo ''; Hi Array ( [1] => blue ) 6.25 Hàm array_ diff_assoc vn d en array array_diff_assoc ( array $array1 , array $array2 ): Tr ph à giá tr à $array2 Ví d $array1 = array( "a" => "green",... ph m à $array2 Ví d $array1 = array( "a" => "green", "red", "blue"); $array2 = array( "b" => "green", "yellow", "red"); $result = array_ intersect( $array1 , $array2 ); z w w w echo ''; print_r($result); echo ''; Hi Array ( [a] => green [0] => red ) 6.27 Hàm array_ intersect_assoc() array array_intersect_assoc ( array $array1 , array $array2 ): Tr các ph à giá tr à $array2 Ví d $array1 = array( "a"... "blue", "red"); $array2 = array( "a" => "green", "yellow", "red"); $result _array = array_ intersect_assoc( $array1 , $array2 ); echo ''; print_r($result _array) ; echo ''; Array ( [a] => green ) 6.28 Hàm array_ combine() vn d en Hi array array_combine ( array $keys , array $values ): T t à giá tr Ví d $a = array( 'green', 'red', 'yellow'); $b = array( 'avocado', 'apple', 'banana'); $c = array_ combine($a,... Hàm array_ merge() array array_merge ( array $array1 [, array $array2 [, array $ ]] ): Nh m ành 1 m t và tr z w w w Ví d $fruits_1 = array( "lemon", "orange"); $fruits_2 = array( "banana", "apple"); $result = array_ merge($fruits_1,$fruits_2); echo ''; print_r($result); echo ''; Hi Array ( [0] [1] [2] [3] ) => => => => lemon orange banana apple 6.14 Hàm array_ rand() mixed array_ rand ( array. .. $tmp[3]; } } (cau-3 .php) < ?php require_once 'cau-1 .php' ; require_once 'cau-2 .php' ; $newArray = array( ); foreach($arrQuestion as $key => $info){ $newArray[$key]["question"] = $info['question']; $newArray[$key]["sentences"] = $arrOption[$key]; } Câu 4: T (quiz .php) < ?php require_once 'cau-1 .php' ; require_once 'cau-2 .php' ; $newArray = array( ); foreach($arrQuestion as $key => $info){ $newArray[$key]["question"]... "red"); $array2 = array( "a" => "green", "yellow", "red"); $result = array_ diff_assoc( $array1 , $array2 ); echo ''; print_r($result); echo ''; Hi Array ( [b] => brown [c] => blue [0] => red ) 6.26 Hàm array_ intersect(): Gi ên: Ph 14 Email: vukhanh2212@gmail.com Giáo trình: Zend Framework! (v 2.2) Ph ình viên chuyên nghi http://www.zend.vn array array_intersect ( array $array1 , array $array2 ... 6.23 Hàm in _array( ) Gi ên: Ph 13 Email: vukhanh2212@gmail.com Giáo trình: Zend Framework! (v 2.2) Ph ình viên chuyên nghi http://www.zend.vn bool in _array ( mixed $value , array $array ): Ki m Ví d $input = array( "a" => "green", "red", "b" => "green", "blue", "red"); if (in _array( 'green', $input)) { echo "Tìm th } z w w w 6.24 Hàm array_ diff() array array_diff ( array $array1 , array $array2 ): Tr... = array( "lemon", "orange", "banana", "apple"); $rand_keys = array_ rand($fruits, 2); echo ''; print_r($rand_keys); echo ''; Hi Array ( [0] => 3 [1] => 2 ) 6.15 array_ search() mixed array_ search ( mixed $needle , array $array ): Tìm giá tr tr a (key) c ìm Ví d àm $array = array( 0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red'); $key = array_ search('green', $array) ; // $key = 2; $key = array_ search('red',... array_ slice($input, -2, 1); $output = array_ slice($input, 0, 3); // returns "c", "d", and "e" // returns "d" // returns "a", "b", and "c" // note the differences in the array keys print_r (array_ slice($input, 2, -1)); print_r (array_ slice($input, 2, -1, true)); 6.17 array_ unique() array array_unique ( array $array ): Gom nh thành 1 ph tr ùng nhau trong m ùng nhau v Ví d $input = array( "a" => "green", "red", "b"... array_ search('red', $array) ; // $key = 1; Gi ên: Ph 11 Email: vukhanh2212@gmail.com Giáo trình: Zend Framework! (v 2.2) Ph ình viên chuyên nghi http://www.zend.vn 6.16 array_ slice() array array_slice ( array $array , int $offset [, int $length ] ): Trích l c àl êu c trong m à 0) Tr ên z w w w Ví d $input = array( "a", "b", "c", "d", "e"); $output = array_ slice($input, 2); $output = array_ slice($input, . print_r (array_ slice($input, 2, -1 )); print_r (array_ slice($input, 2, -1 , true)); 6.17 array_ unique() array array_unique ( array $array ): Gom nhng phn t trùng nhau trong mng $array thành. vukhanh2212@gmail.com array array_intersect ( array $array1 , array $array2 ): Tr v mt mng bao gm các phn t ging nhau v giá tr gia 2 mng $array1 và $array2 . Ví d: $array1 = array( "a". & Options (cau-3 .php) < ?php require_once 'cau-1 .php& apos;; require_once 'cau-2 .php& apos;; $newArray = array( ); foreach($arrQuestion as $key => $info){ $newArray[$key]["question"]