Thứ Hai, 5 tháng 10, 2009

Dùng mảng (array) trong PHP

Dùng mảng (array) trong PHP - Phần 1

Viết lúc 04:37 ngày 11/09/2009 bởi Administrator . Xem: 0.

Là một danh sách các phần tử có cùng kiểu dữ liệu.Mảng có thể là mảng một chiều hay nhiều chiều. Mảng  có 2 thành phần là chỉ mục (key) và giá trị. Chỉ mục có thể là số nguyên hoặc là chuỗi . Bạn có thể khởi tạo mảng bằng các cách như sau:

view plaincopy to clipboardprint?

  1. $arr[key] = value;  
  2. $arr[] = value;  
  3. $arr= array($key1 =>value1,$key2=>value2);  
  4. $arr = array(value1, value2);  
$arr[key] = value;


$arr[] = value;


$arr= array($key1 =>value1,$key2=>value2);


$arr = array(value1, value2);


Như đã giới thiệu thì mảng có thể dùng số nguyên hoặc chuỗi để làm chỉ mục , ta tạm thời phân loại ra nhu sau:



Mng mt chiu có ch mc: là mảng được quản lý bằng cách sử dụng chỉ số dưới kiểu integer để biểu thị vị trí của giá trị yêu cầu.



Cú pháp: $name[index1];



Ví dụ: một mảng một chiều có thể được tạo ra như sau:



view plaincopy to clipboardprint?




  1. $meat[0]="chicken";  


  2. $meat[1]="steak";  


  3. $meat[2]="turkey";  



$meat[0]="chicken";


$meat[1]="steak";


$meat[2]="turkey";


Nếu bạn thực thi dòng lệnh sau: print $meat[1]; thì trên trình duyệt sẽ hiển thị dòng sau: steak. Bạn cũng có thể sử dụng hàm array( ) của PHP để tạo ra một mảng.



Ví dụ:



view plaincopy to clipboardprint?




  1. $meat=array("chicken","steak","turkey");  



$meat=array("chicken","steak","turkey");


Lưu ý: Khác với các ngôn ngữ lập trình khác ( nhu Pascal chẳng hạn) , phần tử đầu tiên của mảng có chỉ mục là 0 , không phải 1. Nhưng khi khai báo mảng , chỉ mục khởi đầu không nhất thiết là 0.



Ví dụ bạn tạo mảng thế này:



view plaincopy to clipboardprint?




  1. $meat = array("chicken","steak","tukey"); //Để lấy phần tử đầu tiên bạn sẽ gọi


  2. echo $meat[0]; //Nhưng nếu khia báo thế này


  3. $arr[5] = 1; //thì chỉ mục tiếp theo là 6.


  4. $arr[] = 3; //key là 6 nhá.



$meat = array("chicken","steak","tukey"); //Để lấy phần tử đầu tiên bạn sẽ gọi


echo $meat[0]; //Nhưng nếu khia báo thế này


$arr[5] = 1; //thì chỉ mục tiếp theo là 6.


$arr[] = 3; //key là 6 nhá.


Nhớ kỹ đều này nhá , lúc đầu tớ cũng bị PHP lừa về chuyện này đấy ( do trước đây chỉ học Pascal).



Mng mt chiu kết hp: rất thuận lợi khi dùng để ánh xạ một mảng sử dụng các t hơn là sử dụng các s ( integer), nó giúp ta giảm bớt thời gian và các mã yêu cầu để hiển thị một giá trị cụ thể.



Ví dụ bạn muốn ghi lại tất cả các thức ăn và các cặp rượu ngon trong việc ăn nhậu của mình.



view plaincopy to clipboardprint?




  1. $annhau["ruou"] = "Minh Mạng Tửu";  


  2. $annhau["khaivi"] = "Lạc rang";  


  3. $annhau["Trangmieng"] = "Chuối";  



$annhau["ruou"] = "Minh Mạng Tửu";


$annhau["khaivi"] = "Lạc rang";


$annhau["Trangmieng"] = "Chuối";


Một cách khác là bạn có thể sử dụng hàm array( ) của PHP để tạo ra một mảng loại này, ví dụ như sau:



view plaincopy to clipboardprint?




  1. $annhau = array( "ruou" => "Minh Mạng Tửu", "khaivi" => "Lạc Rang", "trangmieng" => "Chuối");  


  2. //Khi truy xuất phần tử mảng :


  3. echo $annhau["ruou"];  


  4. //Sẽ xuất ra : Minh Mạng Tửu



$annhau = array( "ruou" => "Minh Mạng Tửu", "khaivi" => "Lạc Rang", "trangmieng" => "Chuối");


//Khi truy xuất phần tử mảng :


echo $annhau["ruou"];


//Sẽ xuất ra : Minh Mạng Tửu 


Mng nhiu chiu có ch mc: chức năng của nó cũng giống như mảng một chiều có chỉ mục, ngoại trừ việc nó có thêm một mảng chỉ mục được dùng để chỉ định một phần tử. Cú pháp: $name[index1] [index2]..[indexN];



Một mảng hai chiều có chỉ mục được tạo ra như sau:



view plaincopy to clipboardprint?




  1. $position = $chess_board[5][4];  



$position = $chess_board[5][4];


Mng đa chiu kết hp: khá hữu ích trong PHP. Giả sử bạn muốn ghi lại các cặp rượu-thức ăn, không chỉ loại rượu, mà cả nhà sản xuất. Bạn có thể thực hiện như sau:



view plaincopy to clipboardprint?




  1. $pairings["Martinelli"] ["zinfandel"] = "Broiled Veal Chops";  


  2. $pairings["Beringer"] ["merlot"] = "Baked Ham";  


  3. $pairings["Jarvis"] ["sauvignon"] = "Prime Rib";  





Dùng mảng (array) trong PHP - Phần 2



Viết lúc 04:44 ngày 11/09/2009 bởi Administrator . Xem: 0.



Ở bài viết trước (Phần 1), chúng ta đã đi hết phần khái niệm về mảng, tiếp theo sẽ là giới thiệu các hàm để truy xuất mảng Để truy xuất hay nhập giá trị cho 1 phần tử mảng cụ thể , bạn có thể gọi trực tiếp chúng như sau:



view plaincopy to clipboardprint?




  1. $arr = $mang[1];  


  2. //hoặc


  3. $arr = $dothi["x"];  



$arr = $mang[1];


//hoặc


$arr = $dothi["x"];


Cú pháp là tên mng[ch mc]



Tips : Để xóa 1 phần tử ra khỏi mảng , ta dùng unset()



Ví dụ:



view plaincopy to clipboardprint?




  1. $arr = array(1,2,3,4);  


  2. unset($arr[2]);  


  3. //$arr bay giờ là array(1,2,4);



$arr = array(1,2,3,4);


unset($arr[2]);


//$arr bay giờ là array(1,2,4);


Để điếm các phần tử của mảng , dùng hàm count()



view plaincopy to clipboardprint?




  1. $arr = array(1,2,3,4);  


  2. $so = count($arr); // đố bạn bằng bao nhiu ?



$arr = array(1,2,3,4);


$so = count($arr); // đố bạn bằng bao nhiu ?


Để duyệt qua hết tất cả các phần tử của mảng (truy xuất hoặc nhập giá trị) ta dùng các cách sau:



1. Cách th nht , dùng vòng lp for



Nếu biết trước số phần tử của mảng ta có thể dùng vòng lặp for để duyệt qua các phần tử mảng:



view plaincopy to clipboardprint?




  1. <?php  


  2. $giatri = array(1,2,3,4,5,6,7,8,9,10);  


  3. for ($i = 0; $i < 10 ; $i ++)  


  4. echo $giatri[$i]."  


  5. ";  


  6. ?>  



<?php


$giatri = array(1,2,3,4,5,6,7,8,9,10);


for ($i = 0; $i < 10 ; $i ++)


echo $giatri[$i]."<br>";


?>


Chạy đoạn mã trên PHP sẽ xuất ra từ 1 đến 10. Để nhập giá trị vào thì cũng thế nhá



Ví dụ:



view plaincopy to clipboardprint?




  1. <?php  


  2. for ($i = 0; $i < 10 ; $i ++)  


  3. echo $giatri[$i] = $i +1 ;  


  4. ?>  



<?php


for ($i = 0; $i < 10 ; $i ++)


echo $giatri[$i] = $i +1 ;


?>


2. Dùng Foreach



Cú pháp:



view plaincopy to clipboardprint?




  1. foreach (array_expression as $value)  


  2.     statement  


  3. foreach (array_expression as $key => $value)  


  4.     statement  



foreach (array_expression as $value)


    statement


foreach (array_expression as $key => $value)


    statement


Ví dụ:



view plaincopy to clipboardprint?




  1. <?php  


  2. $giatri = array(1,2,3,4,5,6,7,8,9,10);  


  3. foreach ($giatri as $value)  


  4. echo $value."  


  5. ";  


  6. ?>  



<?php


$giatri = array(1,2,3,4,5,6,7,8,9,10);


foreach ($giatri as $value)


echo $value."<br>";


?>


Với foreach này để nhập giá trị vào ta phải thêm dấu " &" trước biến $value , như thế này &$value



view plaincopy to clipboardprint?




  1. <?php  


  2. $arr = array(1, 2, 3, 4);  


  3. foreach ($arr as &$value) {  


  4. $value = $value * 2;  


  5. }  


  6. // $arr is now array(2, 4, 6, 8)


  7. ?>   



<?php


$arr = array(1, 2, 3, 4);


foreach ($arr as &$value) {


    $value = $value * 2;


}


// $arr is now array(2, 4, 6, 8)


?> 


Thêm 1 ví dụ nữa , lần này sẽ có sự xuất hiện của chỉ mục



view plaincopy to clipboardprint?




  1. <?php  


  2. $arr = array("mot"=>"one", "hai"=>"two","ba"=> "three");  


  3. foreach ($arr as $key => $value) {  


  4. echo "Key: $key; Value: $value


  5. n";  


  6. }  


  7. ?>   



<?php


$arr = array("mot"=>"one", "hai"=>"two","ba"=> "three");


foreach ($arr as $key => $value) {


    echo "Key: $key; Value: $value<br />n";


}


?> 


Một cách khác để làm như trên ta sẽ dùng vòng lặp while đi với list() và each(). Xét ví dụ sau , thay vì dùng foreach như trên thì ta dùng while như sau:



view plaincopy to clipboardprint?




  1. <?php  


  2. $arr = array("one", "two","three");  


  3. while (list($key, $value) = each($arr)) {  


  4. echo "Key: $key; Value: $value


  5. n";  


  6. }  


  7. ?>   



<?php


$arr = array("one", "two","three");


while (list($key, $value) = each($arr)) {


    echo "Key: $key; Value: $value<br />n";


}


?> 


Lưu ý:


- list() chỉ hoạt động với mảng có chỉ mục là số và phần tử khởi đầu của mảng có chỉ mục là 0 ( PHP manual nói thế). List sẽ gán giá trị cho biến được khai báo bên trong hàm list với giá trị là giá trị tương ứng của mảng.


- Còn hàm each() sẽ trả về giá trị chỉ mục và giá trị của phần tử mảng hiện tại , đồng thời chuyển vị trí của chỉ mục lên 1 đơn vị , sẽ trả về False nếu vị trí của chỉ mục là vị trí cuối cùng trong mảng.Cặp giá trị trả về này sẽ nằm trong 1 mảng 4 phần tử là 0,1 , key, value.


- Phần tử 0 và key chứa tên chỉ mục của mảng, phần tử 1 và value tất nhiên sẽ chứa giá trị .


- Có thể chỉ sử dụng while và each thôi cũng đượ.



view plaincopy to clipboardprint?




  1. <?php  


  2. $arr = array("one", "two","three");  


  3. while ($phantu = each($arr)) {  


  4. echo "Key: $phantu['key']; Value: $phantu['value']  


  5. n";  


  6. }  


  7. ?>   



<?php


$arr = array("one", "two","three");


while ($phantu = each($arr)) {


    echo "Key: $phantu['key']; Value: $phantu['value']<br />n";


}


?> 


Đối với mảng nhiều chiều thỉ cách làm cũng tương tự, chỉ phức tạp hơn là thêm 1 vòng lặp nữa.



view plaincopy to clipboardprint?




  1. <?php  


  2. $sanpham = array( array("ITL","INTEL","HARD"),  


  3. array("MIR", "MICROSOFT","SOFT"),   


  4. array("PHP", "PHPVN.ORG","TUTORIAL")  


  5.                          );  


  6. for ($row = 0; $row < 3; $row++)  


  7. {  


  8. for ($col = 0; $col <3; $col++)  


  9.         {  


  10. echo "|".$sanpham[$row][$col];  


  11.          }  


  12. echo "  


  13. ";  


  14. }  


  15. ?>  

Không có nhận xét nào: