Cũng như các ngôn ngữ lập trình khác, PHP cung cấp cho người lập trình khả năng tự xây dựng hàm của riêng mình. Không chỉ vậy, bạn còn có thể tập hợp các hàm tự xây dựng lại thành các class, thư viện hàm của riêng mình để tái sử dụng qua nhiều dự án, giống như khi sử dụng các thư viện hàm xây dựng sẵn. Bài viết này giới thiệu một số hàm hữu ích được người dùng tự định nghĩa mà tôi đã sưu tầm và cải biên lại.
Tìm số trung vị của mảng số
Số trung vị (median) là một số tách giữa nửa lớn hơn và nửa bé hơn của một mẫu, là số mà số các số nằm trên hay dưới con số đó là bằng nhau. Điều đó có nghĩa rằng 1/2 quần thể sẽ có các giá trị nhỏ hơn hay bằng số trung vị, và một nửa quần thể sẽ có giá trị bằng hoặc lớn hơn số trung vị. Để tìm số trung vị của một danh sách hữu hạn các số, ta xếp tăng dần tất cả các quan sát, rồi lấy giá trị nằm giữa danh sách. Nếu số quan sát là số chẵn, người ta thường lấy trung bình của hai giá trị nằm giữa. Hàm này đặc biệt hữu ích cho giáo viên trong dạy học chủ đề Thống kê cho học sinh.
function Median($numbers){
//$numbers là một array
sort($numbers); //Sắp xếp theo thứ tự tăng dần
$totalNumbers = count($numbers); //Đếm số phần tử của mảng
$mid = floor($totalNumbers/2); //Lấy phần nguyên của nửa tổng
return ($totalNumbers % 2) === 0 ? ($numbers[$mid - 1] + $numbers[$mid]) / 2 : $numbers[$mid];
}
Nào, ta chạy thử một ví dụ:
$number_list1 = array(1,3,3,6,7,8,9);
$number_list2 = array(1,2,3,6,7,9);
echo implode($number_list1,",")." => ".Median($number_list1);
echo "<br>";
echo implode($number_list2,",")." => ".Median($number_list2);
Sắp xếp mảng liên kết theo giá trị
PHP cho phép bạn liên kết tên (nhãn) với từng phần tử của mảng trong PHP bằng cách sử dụng biểu tượng “=>”. Như vậy, bạn có thể dễ dàng nhớ phần tử vì mỗi phần tử được biểu thị bằng nhãn hơn là một con số tăng dần. Sau đây là một số cách để sắp xếp mảng theo giá trị:
Cách 1. Tự xây dựng hàm riêng
function orderBy($items,$attr,$order){
$sortedItems = array();
foreach ($items as $item) {
$key = is_object($item) ? $item->{$attr} : $item[$attr];
$sortedItems[$key] = $item;
}
if ($order === 'desc'){
krsort($sortedItems);
}else{
ksort($sortedItems);
}
return array_values($sortedItems);
}
Chạy thử hàm này để sắp xếp danh sách học sinh theo điểm số tăng dần hoặc giảm dần:
$score = array(
array("name"=>"Ly Thanh Ngan","score"=>8.2),
array("name"=>"Nguyen Trung An","score"=>9.1),
array("name"=>"Kim Thanh Vu","score"=>6.4),
array("name"=>"Ho Cong Hien","score"=>7.3)
);
echo "<pre>";
echo print_r(orderBy($score,"score","asc"));
echo "</pre>";
Cách 2. Dùng hàm có sẳn trong PHP
$score = array("Ly Thanh Ngan"=>8.2,"Nguyen Trung An"=>9.1,"Kim Thanh Vu"=>6.4,"Ho Cong Hien"=>7.3);
asort($score); //Sắp xếp tăng dần theo giá trị
foreach($score as $x => $x_score) {
echo $x.": ".$score[$x];
echo "<br>";
}
Nếu muốn sắp xếp theo thứ tự giảm dần theo cách 2 thì ta thay lệnh “asort()” thành “arsort()”. Hy vọng là bài viết này hữu ích.