01/10/2018, 16:14

Hỏi về sắp xếp trong php

Chào mọi người.
Hôm qua mình có hỏi câu này [Sắp xếp trong php] nhưng vẫn chưa giải quyết được nên mạo muội hỏi mn tiếp.
Ví dụ mình có một class trong php như sau:

<?php
class Example
{
    public function getData(){
        // code
        return $data;
    }
    public function sort(){
        $data = $this->getData();
        // code sort
        return $data; // da duoc sap xep
    }
}

Vả đây là data mà function getData trả về

> Array
> (
>     [0] => Array
>         (
>             'id' => 13,
>             'nameStudent' => "Tran Van B",
>             'birthDate' => "1996-05-31",
>             'emailStudent' => "tran@gmail.com",
>             'phoneNumber' => "123123123",
>             'pictureProfile' => "images1675493_google_chrome_logo_930x488.png",
>         ),

>     [1] => Array
>         (
>             'id' => 16,
>             'nameStudent' => "Tran Van B",
>             'birthDate' => "1996-05-31",
>             'emailStudent' => "tranfadfasdf@gmail.com",
>             'phoneNumber' => "1231234323123",
>             'pictureProfile' => "images1675493_google_chrome_logo_930x488.png",
>         ),
>     [2] => Array
>         (
>             'id' => 16,
>             'nameStudent' => "Nguyen Van C",
>             'birthDate' => "1996-05-31",
>             'emailStudent' => "tranfadfasdf@gmail.com",
>             'phoneNumber' => "1231234323123",
>             'pictureProfile' => "images1675493_google_chrome_logo_930x488.png",
>         ),
> );

Thực sự mình vẫn chưa tìm thấy một giải pháp nào để sắp xếp được

  1. theo tên
  2. theo năm sinh
    Của dữ liệu được getData trả về như kia. Mong m.n giúp đỡ
Vietlubu viết 18:22 ngày 01/10/2018

Bạn có thể post câu hỏi thay thắc mắc ngay bên kia mà?
Như link này thì đây là kết quả đúng nhất rồi: Sắp xếp trong php
Bạn phải dùng usort() để thực hiện sắp xếp trong trường hợp này.
usort() đơn giản là loop array của bạn rồi gọi callback, trong callback đó bạn có thể thay đổi thứ tự tùy điều kiện bạn muốn.
Mình có demo 2 function nhỏ để sort theo name theo alphabeta và DoB theo thứ tự cũ thì lên trước.
Hi vọng lần sau bạn không post những bài lặp lại như thế này.

<?php

class Example
{
    public function getData(){
        $data = [
            [
                'id' => 13,
                'nameStudent' => "Tran Van B",
                'birthDate' => "1996-05-31",
            ],
            [
                'id' => 16,
                'nameStudent' => "Tran Van A",
                'birthDate' => "1996-07-31",
            ],
            [
                'id' => 12,
                'nameStudent' => "Nguyen Van C",
                'birthDate' => "1996-03-31",
            ],
        ];
        return $data;
    }
    public function sort(){
        $data = $this->getData();

        usort($data, [$this, 'sortByDob']);

        return $data; // da duoc sap xep
    }

    private function sortByName($a, $b) {
        // Sắp xếp theo alphabeta
        return strcmp($a['nameStudent'], $b['nameStudent']);
    }
    private function sortByDob($a, $b) {
        // Sắp xếp theo ngày cũ thì lên trước
        return (strtotime($a['birthDate']) > strtotime($b['birthDate']));
    }
}

$example = new Example;

var_dump($example->sort());

Chẵn viết 18:26 ngày 01/10/2018

Cảm ơn bạn đã support. Thực sự cảm ơn

Bài liên quan
0