按第二个单词的字母顺序对数组进行排序


Sort an array by alphabetically by second word

>我正在对一个多维数组进行排序,其中包含人名和一些信息。我正在使用asort($obj)按名字的字母顺序排序(它排在第一位)。效果很好,只是现在我需要按他们的姓氏而不是第一个排序。但是,例如,整个名称"Joe Smith"都在"名称"键下。我需要按姓氏而不是名字排序。我该怎么做?

编辑看来我走错了路。最简单的方法是简单地将数据库中的名字和姓氏分配给单独的字段,而不是相同的字符串。

使用 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");

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

$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');