Sử dụng hàm arsort đặt lại trật tự thứ tự trong mảng

Xin chào tất cả các bạn, hôm nay Thịnh chi sẻ với bạn một hàm php cũng khá hay và cũng khá hữu ích trong quá trình lập trình web bằng ngôn ngữ php. Trả là bữ vừa rồi mình cần phải làm một menu theo tháng năm để khi click vào thì ra bài viết theo tháng và theo năm. Nhưng khổ lỗi mình lại chưa nghĩ ra làm sao để có được cách xử lý tạo một mảng năm và trong năm hiện tại thì có tháng nhưng cũng may thay một lúc mày mò cũng ra cách giải quyết nhưng hơi dở phải sử dụng đến 2 vòng lặp rắc rối để giải quyết. Nhưng sau khi giải quyết được thì mình lại gặp một  vấn đề là nó lại hiển thị theo danh sách từ tháng một thới tháng 9 hiện tại thay vì muốn hiển thị ngược lại.

Điều đó là rất khó khăn khi mình đổi một mảng giá trị từ xuôi sang ngược lại giảm dần là rất khó. Nó không giống nhưu bạn lấy cơ sở dữ liệu rồi tạo thành một mảng ngược xuôi theo thứ tự nào đó trong cơ sở dữ liệu. Nhưng đây là một mảng không lấy từ cơ sở dữ liệu mà mình tự hình thành theo thời gian.

Để minh họa dễ hình dung cho bài viết chi sẻ này thì ở bài này mình sử dụng hàm arsort dùng để đảo thứ tự từ nhớn xuống bé danh sách tháng trong năm.

Khi bạn sử dụng hàm arsort là một hàm php có sẵn và việc sử dụng nó cũng khá đơn giản giúp bạn đảo giá trị trật tự từ dưới lên thành từ trên xuống tức là đổi trật tự từ số bé tới số to thành số to tới số bé.

Cụ thể ví dụ như sau:

  • Yêu cầu bài toán đặt ra: hiển thị danh sách các năm và năm hiện tại thì hiển thị tới tháng hiện tại.
  • Tiếp theo là tình bày nó ra ngoài trang web theo thứ tự năm hiện tại giảm dần về các năm trước và các tháng từ tháng hiện tại về các tháng trước đó.

array(
   [2016] => array(
      [01] => 01
      [02] => 02
      [03] => 03
      [04] =>04
      [05] => 05
      [06] => 06
      [07] => 07
      [08] => 08
      [09] => 09
     )
   [2015] => 2015
   [2014] => 2014
   [2013] => 2013
   [2012] => 2012
   [2011] => 2011
)

Như vậy là năm là đã được đúng theo yêu cầu giảm dần nhưng tháng thì nó lại bị lộn và chính vì vậy mình tiến hành sử dụng vòng lặp foreach để nó giảm về năm hiện tại và tạo điều kiện if else để xử lý riêng năm 2016 để tách mảng và năm còn lại thì sẽ trả về trong else như sau.


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

   if($value != '' and $key == $date_year) {
   // $date_year là biến mình đã xác định giá trị được là năm hiện tại
   // tại đây mình tiến hành thực hiện một vòng lặp foreach nữa để lấy giá trị từng thành phần trong mảng năm 2016 và in ra ngoài website.
   // nhưng trước khi thực hiện thì bạn cần đổi danh sách tháng từ 01 đến 09 thành 09 về 01 thì mới đúng cách trình bày hiển thị tháng hiện tại trên cùng và năm hiện tại trên cùng
   // cách sử dụng là hàm arsort
   // $value là mảng danh sách tháng và mình dùng luôn arsort

   arsort($value)
      foreach ($value as $mo) {
        // noi dung in ra thanh phan mang cac thang trong nam hien tại
      }
   }
   else{
   // phần này hiển thị các năm không có tháng để tránh bạn hiển thị lại năm hiện tại
   }
}

Kết quả cuối cùng bạn có được một mảng như sau và code hiển thị thì do bạn thực hiện


array(
   [2016] => array(
      [09] => 09
      [08] => 08
      [07] => 07
      [06] => 06
      [05] => 05
      [04] => 04
      [03] => 03
      [02] => 02
      [01] => 01
   )
   [2015] => 2015
   [2014] => 2014
   [2013] => 2013
   [2012] => 2012
   [2011] => 2011
)

Cách làm là như vậy, tác dụng của hàm arsort là đổi lại trật tự thành phần trong mảng để giúp bạn có thể hiển thị kết quả ngoài site theo ý muốn