簡體   English   中英

如何根據姓氏過濾數組?

[英]How to filter an array based on last name?

我有一個數組如下:

Array(
    [0] => 'Sarah, Green',
    [1] => 'Adam, Brown',
    [2] => 'Fred, Able'
);

從這個數組中,我需要根據姓氏進行排序。

我嘗試了以下代碼:

$this->sortByLastName($data);


private function sortByLastName($data)
{
    $result = uasort($data, function($a, $b) {
        $splitFirstItem = explode(',', $a);
        $spliteSecondItem = explode(',', $b);

        $firstItemElement = trim(end($splitFirstItem));
        $secondItemElement = trim(end($spliteSecondItem));

        return strcasecmp($firstItemElement, $secondItemElement);
    });


    return $result;
}

但結果我才是真實的。

我在這里犯了什么錯誤。

uasort只是根據是否成功完成而返回true / false 該數組已在適當位置排序,因此您的代碼應如下所示:

private function sortByLastName($data)
{
    uasort($data, function($a, $b) {
        $splitFirstItem = explode(',', $a);
        $spliteSecondItem = explode(',', $b);

        $firstItemElement = trim(end($splitFirstItem));
        $secondItemElement = trim(end($spliteSecondItem));

        return strcasecmp($firstItemElement, $secondItemElement);
    });


    return $data;
}

3v4l.org上的演示

如下更改功能。

private function sortByLastName($data)
{
    uasort($data, function($a, $b) {
        $splitFirstItem = explode(',', $a);
        $spliteSecondItem = explode(',', $b);

        $firstItemElement = trim(end($splitFirstItem));
        $secondItemElement = trim(end($spliteSecondItem));

        return strcasecmp($firstItemElement, $secondItemElement);
    });


    return $data;
}

這是因為uasort不返回數組,而是更改傳遞給它的數組。 它僅返回布爾值true或false,具體取決於過程是否成功

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM