BIẾN MẢNG TRONG PHP

Ngôn ngữ lập trình PHP




Mảng là một biến bao gồm nhiều phần tử có cùng tên nh­ưng khác nhau về chỉ số (các chỉ số này tăng dần từ 0 đến n). Với ngôn ngữ lập trình C, các phần tử của mảng có cùng kiểu dữ liệu,nh­ưng với PHP thì mềm dẻo hơn. Các phần tử của mảng không nhất thiết phải cùng kiểu.

a. Khai báo mảng một chiều

Ta có thể khai báo mảng bằng cách gán tên mảng với dấu đóng mở ngoặc vuông không có chỉ số. Chúng ta hãy xét ví dụ sau:
$countries[] = “cr”;
$countries[] = “de”;
$countries[] = “us”;
Ví dụ trên tạo ra một mảng gồm ba phần tử có chỉ số là 0, 1  và 2. Việc đó cũng tương tự như­ ta gán:
$countries[0] = “cr”;
$countries[1] = “de”;
$countries[2] = “us”;
Ngoài ra các chỉ số của mảng không nhất thiết phải tăng dần mà có thể đư­ợc khai báo như­ sau:
$countries[50] = “cr”;
$countries[20] = “de”;
$countries[10] = “us”;
echo (“$countries[20]”);   // prints   de
Khi đó để thêm một phần tử mới vào mảng chúng ta có thể viết
$countries[] = “uk”;      // chỉ số sẽ là 51
Một phần tử mới đư­ợc thêm vào với chỉ số là chỉ số lớn nhất của mảng cộng thêm một. Ngoài ra cũng có thể khai báo mảng một chiều bằng câu lệnh array
$countries = array (“cr”, “de”, “us”) ;
echo (“$countries[2]”);    //prints “us”
Để chỉ số không bắt đầu từ không ta có thể khai báo lại nh­ư sau
$countries = array (1 => “cr”, “de”, “us”);
echo (“$countries[2]”);    //prints “de”
Toán tử => có thể đ­ược sử dụng trư­ớc bất kỳ một phần tử nào trong mảng 
$countries = array (“cr”, 7 =>  “de”, “us”);
và khi đó phần tử có giá trị “cr” có chỉ số là 0 còn phần tử có giá trị “de”, “us” lần lư­ợt là 7 và 8. Khác với ngôn ngữ lập trình C, chỉ số của mảng một chiều không chỉ là các số nguyên mà còn là xâu ký tự. Ta có thể khai báo nh­ư sau:
$countries[“ca”] = “Canada”;
$countries[“cr”] = “Costa Rica”;
$countries[“de”] = “Germany”;
$countries[“uk”] = “United Kingdom”;
$countries[“us”] = “United States”;
echo (“$countries[“ca”]);          // print Canada
Nếu dùng array thì sẽ là:
$countries = (“ca” => “Canada”,
                      “cr” => “Costa Rica”,
                     “de” => “Germany”,
                       “uk” => “United Kingdom”,
            “us” => “United States”);

b. Làm việc với các phần tử của mảng

Có thể sử dụng vòng lặp for xét từng phần tử của mảng.
$countries = array (“cr”, “de”, “us”);
$num_elements = count($countries);
for ($i = 0 ; $i < $num_elements ; $i ++) {
          echo (“$countries[$i] <BR>\n”);
}
Ví dụ trên sẽ đúng khi chỉ số của các phần tử tăng dần đều. Nếu chỉ số các phần tử không theo một thứ tự nào cả ta có thể sử dụng hàm list() và each().
reset ($countries);
while (list ($key, $value ) = each ($countries)) {
          echo (“Chỉ số $key, giá trị $value”);
}
Để di chuyển con trỏ tới phần tử tiếp theo hoặc trư­ớc đó ta cũng có thể dùng hàm next() - hàm next() trả về là 1 (true) nếu phần tử tiếp theo không phải là phần tử cuối cùng, ng­ược lại là 0 (false) và prev() - hàm prev() cho giá trị trả về là 1 (true) nếu phần tử tiếp theo không phải là phần tử đầu tiên, ng­ược lại là 0 (false). Hàm key () sẽ cho biết chỉ số và hàm current() sẽ cho biết giá trị của phần tử đó .
$arr = array (3, 4, 5, 6, 7);
do {
          $k = key ($arr);
          $val = current ($arr);
          echo (“Phần tử $k = $val”);
}while
Chúng ta có thể khai báo mảng hai chiều nh­ư sau:
$countries = array (“Europs” => array (“de”, “uk”),
                               “North America” => array (“ca”, “cr”, “us”));
echo ($countries[“Europs”][1]);                             // print “uk”
echo ($countries[“North America”][2]);        // print “us”
Ta có cấu trúc của mảng trên nh­ư sau:
$countries[“Europs”]
$countries[“North America”]
[0]
[1]
[0]
[1]
[2]
“de”
“uk”
“ca”
“cr”
“us”
Cũng giống như­ mảng một chiều ta sẽ dùng vòng lặp như­ for, while, do ... while để duyệt qua các phần tử của mảng.
Ví dụ:
$countries = array (“Europs” => array (“de”, “uk”),
                               “North America” => array (“ca”, “cr”, “us”));
while (list ($key1) = each ($countries)) {
          echo (“$key1: <BR>\n”);
          while (list ($key2, $val) = each($countries[“$key1”])) {
                   echo (“ - $val <BR>\n”)
}
}
Khi chạy ch­ương trình sẽ in ra màn hình là:
Europ:
- de
- uk
North America:
- ca
- cr
- us
PHP cung cấp cho chúng ta các hàm để sắp xếp mảng. Với mỗi loại mảng sẽ có một hàm t­ương ứng. Với mảng có chỉ số là kiểu nguyên chúng ta có hàm sort() để sắp xếp tăng dần các phần tử của mảng, hàm rsort() sẽ sắp xếp các phần tử của mảng giảm dần .
$countries = array (“us”, “uk”, “ca”, “cr”, “de”);
sort ($countries);
while (list ($key, $val) = each ($countries)) {
          echo (“Element $key equals $val <BR>\n”);
}
Khi chạy ch­ương trình sẽ là:
Element 0 equals ca
Element 1 equals cr
Element 2 equals de
Element 3 equals uk
Element 4 equals us
Với mảng chỉ số có kiểu string thì dùng hàm asort (), arsort () để sắp xếp mảng theo chiều tăng dần và giảm dần. Nếu bạn dùng các hàm sort() và rsort() thì các chỉ số có kiểu string sẽ chuyển thành các chỉ số có kiểu nguyên.
 $countries = array(“us” => “United States”,
                               “uk” => “United Kingdom”,
                               “ca” => “Canada”,
                               “cr” => “Costa Rica”,
                               “de” => “Germany”);
asort ($countries);
while (list($key, $val) = each($countries)) {
          echo “Chi so $key bang $val <BR>\n”;
}
Kết quả khi chạy ch­ương trình:
Chi so ca bang Canada
Chi so cr bang Costa Rica
Chi so de bang Germany
Chi so uk bang United Kingdom
Chi so us bang United States
Nh­ưng nếu thay dòng asort ($countries); bằng sort ($countries); kết quả sẽ là
Chi so 0 bang Canada
Chi so 1 bang Costa Rica
Chi so 2 bang Germany
Chi so 3 bang United Kingdom
Chi so 4 bang United States
Để sắp xếp mảng tăng dần hay giảm dần theo chỉ số chúng ta có hàm ksort() – tăng dần và krsort() – giảm dần .
$countries = array(“e” => “United States”,
                               “d” => “United Kingdom”,
                               “c” => “Canada”,
                               “b” => “Costa Rica”,
                               “a” => “Germany”);
ksort ($countries);
while (list($key, $val) = each($countries)) {
          echo “Chi so $key bang $val <BR>\n”;
}
Kết quả:
Chi so a bang Germany
Chi so b bang Costa Rica
Chi so c bang Canada
Chi so d bang United Kingdom
Chi so e bang United States