0

我正在对一个多维数组进行排序,其中包含人名和一些关于他们的信息。我用asort($obj)他们的名字按字母顺序对其进行排序(它排在第一位)。它工作得很好,只是现在我需要按他们的姓氏排序,而不是第一个。但是,例如“Joe Smith”的整个名称都在“name”键下。我需要它按姓氏排序,而不是第一个。我怎样才能做到这一点?

编辑 似乎我以错误的方式去做了。最简单的方法是简单地将数据库中的名字和姓氏分配给单独的字段,而不是相同的字符串。

4

2 回答 2

3

使用usort

function cmp($a, $b)
{
    list($firstNameA, $lastNameA) = explode(" ", $a["name"], 2);
    list($firstNameB, $lastNameB) = explode(" ", $b["name"], 2);

    return strcmp($lastNameA, $lastNameB);
}

usort($array, "cmp");
于 2012-05-07T15:28:41.597 回答
0

不,与之前的答案有很大不同。但是,在这种情况下,使用自然算法可能是一个不错的选择。

$array = array( 
    array("first", "last"), 
    array("first2", "last2")
); //For an array of such format
function compare_last($a, $b) { return strnatcmp($a[1], $b[1]); } 
usort($array, 'compare_last');
于 2012-05-07T22:51:12.720 回答