我正在对一个多维数组进行排序,其中包含人名和一些关于他们的信息。我用asort($obj)
他们的名字按字母顺序对其进行排序(它排在第一位)。它工作得很好,只是现在我需要按他们的姓氏排序,而不是第一个。但是,例如“Joe Smith”的整个名称都在“name”键下。我需要它按姓氏排序,而不是第一个。我怎样才能做到这一点?
编辑 似乎我以错误的方式去做了。最简单的方法是简单地将数据库中的名字和姓氏分配给单独的字段,而不是相同的字符串。
我正在对一个多维数组进行排序,其中包含人名和一些关于他们的信息。我用asort($obj)
他们的名字按字母顺序对其进行排序(它排在第一位)。它工作得很好,只是现在我需要按他们的姓氏排序,而不是第一个。但是,例如“Joe Smith”的整个名称都在“name”键下。我需要它按姓氏排序,而不是第一个。我怎样才能做到这一点?
编辑 似乎我以错误的方式去做了。最简单的方法是简单地将数据库中的名字和姓氏分配给单独的字段,而不是相同的字符串。
使用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');