Khái niệm mảng và các hàm xử lý mảng trong php


tự học php cơ bản 23/06/2015 Cùng chuyên mục

Tìm hiểu khái niệm - cách khai báo mảng một chiều, nhiều chiều ... phương thức truy cập, sửa đổi - gán giá trị, duyệt mảng - một số hàm xử lý mảng thông dụng trong php.

Mảng trong  php:

PHP hỗ trợ mảng rất mạnh mẽ và linh hoạt. Mảng trong php là tập hợp các key, value - một bản đồ keys( indexes) => value. Nó khác với các ngôn ngữ khác như C, JAVA...các phần tử của mảng có thể có kiểu dữ liệu khác nhau. Array indexes (chỉ mục phần tử của mảng) có thể là số nguyên như 0, 1, 2... hay là chuỗi như 'name',...

KHAI BÁO MẢNG (KHỞI TẠO MẢNG):

Sử dụng từ khóa array để khởi tạo mảng, với cú pháp như sau:

array([key=>] value, [key=>] value, ...);

Lưu ý: [key=>] là tùy chọn, nếu không đặt key hay indexes (chỉ mục) thì PHP sẽ đặt key cho phần tử tự động
là các số nguyên 0, 1, 2,...

Ví dụ 1: Khai báo mảng có 3 phần từ 1; 2; 3:

$arr = array(1, 2, 3);
print_r($arr); //sử dụng hàm print_r để xem cấu trúc mảng

Ví dụ 2: Khai bảo 1 mảng, gồm 2 phần tử: tên là  Phong; tuổi là 28:

$arr = array("name"=>"Dat", "age"=>28); 
// bạn thấy đó, mảng trong php cho phép các phần tử có kiểu khác nhau
print_r($arr); 

Khai báo mảng rỗng:

array(); 

Khai báo mảng lồng (nested array - hay mảng nhiều chiều):

Nghĩa là mỗi phần tử của mảng cha là một mảng con: 

$multi_arr = array(
  array("name" => "Dat", "age" => 26),
  array("name" => "Phong", "age" => 28)
);
print_r($multi_arr);

Thêm dữ liệu vào mảng

Có thể thêm dữ liệu vào mảng với cú pháp $<tên mảng>[] = <value> - cú pháp này sẽ tự động thêm 1 giá trị vào mảng với key dạng số nguyên, cú pháp $<tên mảng>["key"] = <value> - cú pháp này sẽ tạo 1 khóa có tên key và gán giá trị cho khóa đó.
Ví dụ 3:

//khởi tạo mảng rỗng
$a = array();
$a[] = "phần tử 1";
$a["pt1"] = "phần tử 2";
print_r($a); //xem cấu truc mảng trước khi tạo mảng lồng
//tạo mảng lồng
$i = 0;
while( $i < 3)
{
	$a[] = array('khóa ' => $i);
	$i++;
}
print_r($a); //xem cấu truc mảng sau khi tạo mảng lồng

TRUY CẬP MẢNG:

- Sử dụng cú pháp $arr[key] - để truy cập vào mảng với key kiểu số nguyên, ví dụ: $arr[0]
- Sử dụng cú pháp $arr["key"] hay $arr['key'] để truy cập mảng có key là chuỗi, ví dụ: $arr["name"]

Lưu ý
: nếu phần tử của mảng có key kiểu chuỗi mà dùng cách truy cập như kiểu số nguyên sẽ báo lỗi.

Mỗi phần tử của mảng, được xem như một biến - truy cập tới mảng như việc truy cập tới biến.

Sửa giá trị phần tử của mảng:

Sửa giá trị nghĩa là truy cập tới phần tử mảng rồi gán giá trị mới cho nó. Cú pháp chung:

$arr[key] = value;

Ví dụ 4: Sửa giá trị của mảng $arr

$arr = array(1, 2);
print_r($arr);
$arr[0] = "one";
print_r($arr);

 Đọc giá trị:

Tương tự như truy cập mảng.
Ví dụ 5: Đọc giá trị của mảng $arr - nếu giá trị là 1 sẽ xuất ra 'one'

$arr = array(1, 2);
if($arr[0] == 1)
{
   echo 'one';
}
else
{
  echo 'two or another';
}

 Truy cập vào mảng lồng:

Sử dụng cú pháp: $array[key parent][key child]. Mảng lồng - mỗi phần tử của một mảng là một mảng - mảng con trong mảng cha. 
Ví dụ 6: Khai báo mảng 2 chiều - với mảng con có 2 khóa là 'name' và 'age'

$arr = array(
  array("name" => "Dat", "age" => 26),
  array("name" => "Phong", "age" => 28)
);
echo $arr[0]["name"]; // kết quả sẽ là Dat
echo $arr[1]["age"]; // kết quả sẽ là 28

 Duyệt mảng:

Sử dụng vòng lặp để duyệt mảng - nghĩa là truy cập tới từng phần tử của mảng.

Duyệt mảng dùng vòng lặp for:

Ví dụ 7: Duyệt mảng có 3 phần tử và xuất ra giá trị:

$arr = array(1, 2, 3);
for($i = 0;$i<3; $i++)
{
   echo 'Phan tu mang co chi so: ',$i,' co gia tri: ',$arr[$i],'
'; 
}
/*kết quả sẽ là:
Phan tu mang co chi so 0 co gia tri 1
Phan tu mang co chi so 1 co gia tri 2
Phan tu mang co chi so 2 co gia tri 3
*/

Ở trên ta đã biết số lượng phần tử mảng. Trong trường hợp chưa biết được số phần tử mảng
có thể sử dụng hàm count để đếm số phần tử của mảng hoặc dùng foreach để duyệt mảng.
Ví dụ 8: duyệt mảng, dùng hàm count()

$arr = array(1, 2, 3);
$n = count($arr); //dem so phan tu cua mang
for($i = 0;$i<$n; $i++)
{
   echo 'Phan tu mang co chi so: ',$i,' co gia tri: ',$arr[$i],'<br>'; 
}

Duyệt mảng dùng foreach:

Đọc là "duyệt với mỗi phần tử của mảng - trỏ tới giá trị"
Cú pháp chung:

foreach($array as [$key => ] [&] value)
{
   //code
}

Lưu ý: cú pháp trong ngoặc [] là tùy chọn.
Ví dụ 9: Duyệt mảng 3 phần tử 1, 2, 3 - sử dụng vòng lặp foreach

$arr = array(1, 2, 3);
foreach($arr as $key)
{
   echo $key,' - '; 
}
//Kết quả sẽ là: 1 - 2 - 3

SẮP XẾP MẢNG:

php hỗ trợ một số hàm sắp xếp mảng như sort(), ksort(), asort() - giúp cho việc sắp xếp dữ liệu trong mảng rất thuận tiện.

Có 3 tùy chọn sắp xếp:

SORT_REGULAR So sánh dựa trên tần số xuất hiện- mặc định
SORT_NUMERIC Chuyển đối giá trị phần tử mảng sang số nguyên rồi sắp xếp
SORT_STRING So sánh các phần tử như so sánh chuỗi

Ví dụ 10: Sắp xếp mảng $a - thứ tự tăng dần

$a = array(1,8,2);
var_dump(sort($a));

CÁC THAO TÁC TÌM KIẾM TRONG MẢNG

Kiểm tra xem có giá trị trong mảng hay không?

Sử dụng hàm in_array(), cú pháp:

bool in_array($value_search, array $array_find)

Trong đó:

  • $value_search: là giá trị cần tìm
  • $array_find: là mảng tìm kiếm
  • hàm trả ra TRUE nếu tìm thấy, ngược lại trả ra FALSE

Ví dụ 11: Tìm giá trị 1 trong mảng $arr có 3 phần tử 1, 2, 3

<?php
	$arr = array(1,2,3);
	//hàm trả ra kết quả tìm kiếm giá trị trong 1 mảng	
	function find($key,$arr)
	{
		 if(in_array($key,$arr))
		{
			echo 'Tìm thấy';
		}
		else
		{
			echo 'Không tìm thấy';
		}
	}
	find(1,$arr); //tìm thấy
	find(5,$arr); //không tìm thấy
?>

Tìm kiếm giá trị trong mảng

Sử dụng hàm mixed array_search( mixed $needle , array $haystack [, bool $strict = false ]) - trong đó:

  • $needle: là từ khóa tìm kiếm - có thể có các kiểu như int, string, ...
  • $haystack: là mảng tìm kiếm
  • Tùy chọn $strict: tìm kiếm nghiêm ngặt - hàm sẽ kiểm tra xem kiểu dữ liệu của khóa tìm kiếm và phần tử trong mảng $haystack có giống nhau hay không. 
  • Giá trị trả về: hàm sẽ trả ra khóa (key) trong mảng tìm kiếm nếu tìm thấy - trả ra FALSE nếu không tìm thấy

Ví dụ 12: Tìm giá trị '1' trong mảng $arr có 3 phần tử '1' '2' '3'

$arr = array(1, 2, 3);
$found = array_search(1, $arr);
/*sử dụng !== vì trong trường hợp vị trí tìm thấy là 0
nếu kiểm tra $found sẽ trả ra FALSE nhưng thực tế là có tìm thấy  => sai */
if(($found !== FALSE))
{
	echo 'Tim thay, vi tri '.$found;
}
else
{
	echo 'Khong tim thay';
}

Tìm kiếm khóa: 

Sử dụng hàm array_key_exists(), cú pháp:

bool array_key_exists($key_search, array $array_find)

Trong đó:

  • $key_search: là khóa cần tìm
  • $array_find: là mảng tìm kiếm
  • hàm trả ra TRUE nếu tìm thấy, ngược lại trả ra FALSE

Ví dụ 13:  Tìm kiếm khóa '1', '5' trong mảng $arr với hàm array_key_exists()

<?php
	$arr = array("mot","hai","ba");
	//hàm trả ra kết quả tìm kiếm giá trị trong 1 mảng	
	function find_key($key,$arr)
	{
		 if(array_key_exists($key,$arr))
		{
			echo 'Tìm thấy','giá trị trong mảng: ',$arr[$key];
		}
		else
		{
			echo 'Không tìm thấy';
		}
	}
	find_key(1,$arr); //tìm thấy
	find_key(5,$arr); //không tìm thấy
?>

Các hàm kiểm tra và thao tác dữ liệu 

- hàm empty() - kiểm tra xem có phải là mảng rỗng, trả ra TRUE nếu mảng rỗng
- hàm unset($key) - dùng để gỡ 1 khóa trong mảng
- hàm print_r() - xuất ra cấu trúc mảng là dạng con người có thể hiểu được
- hàm is_array() - kiểm tra xem có phải là một mảng hay không
- hàm count() - đếm số lượng phần tử có trong mảng
Ví dụ 14:

	$a = array();
	var_dump(empty($a)); // kết quả TRUE: mảng rỗng
	$a[] = 1;
	var_dump(empty($a)); //kết quả: FALSE - mảng có dữ liệu
	var_dump(is_array($a)); //kết quả TRUE 
	$a["name"] = array("Tuấn", "Kiệt", "Hùng");
	print_r($a); //xem cấu trúc mảng 
	unset($a["name"]);
	print_r($a); //xem cấu trúc mảng sau khi bỏ khóa name

TỔNG KẾT

Mảng là các đối tượng thường làm việc trong php - các bạn cần tìm hiểu thật kỹ và vững về đối tượng này. 


Bài cùng chuyên mục:




Bình luận:


php