Php 对多维关联数组排序?
好的,我有一个用于传输名称的数组,它如下所示:Php 对多维关联数组排序?,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,好的,我有一个用于传输名称的数组,它如下所示: array(2) { [0]=> array(3) { ["firstName"]=> string(3) "Joe" ["lastName"]=> string(5) "Black" ["uid"]=> int(3225) } [1]=> array(3) { ["firstName"]=> string(4) "John"
array(2) {
[0]=>
array(3) {
["firstName"]=>
string(3) "Joe"
["lastName"]=>
string(5) "Black"
["uid"]=>
int(3225)
}
[1]=>
array(3) {
["firstName"]=>
string(4) "John"
["lastName"]=>
string(3) "Doe"
["uid"]=>
int(3516)
}
}
现在,如何按lastName
对该数组进行排序?在中发布时,您可以使用以下功能:
<?php
function sksort(&$array, $subkey="id", $sort_ascending=false) {
if (count($array))
$temp_array[key($array)] = array_shift($array);
foreach($array as $key => $val){
$offset = 0;
$found = false;
foreach($temp_array as $tmp_key => $tmp_val)
{
if(!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey]))
{
$temp_array = array_merge( (array)array_slice($temp_array,0,$offset),
array($key => $val),
array_slice($temp_array,$offset)
);
$found = true;
}
$offset++;
}
if(!$found) $temp_array = array_merge($temp_array, array($key => $val));
}
if ($sort_ascending) $array = array_reverse($temp_array);
else $array = $temp_array;
}
?>
StackOverflow有很多类似的问题,但让我举个简单的例子。为此,您可以使用该函数 PHP5.3示例(不是最好的,但可能更容易理解):
简短且可重复使用的方法:
usort($array, 'nameSort');
function nameSort($a, $b)
{
return strcmp($a['lastName'], $b['lastName']);
}
虽然相关问题可能与您的情况不符合1:1,但大多数问题都包含完成任务所需的函数和解释。答案可能几乎完全相同(关键需求已更改)。另请注意,如果您在类中执行此操作,您将向usort传递数组而不是字符串,像这样:
usort($array,array($this,'nameSort')代码>是所有的“如果…”。。还有其他必要吗?我认为这可以被重构为返回$I['lastName']>$j['lastName']
@galdikas文档说函数应该返回1、0或-1。我已经很久没有接触过PHP了。
usort($array, 'nameSort');
function nameSort($a, $b)
{
return strcmp($a['lastName'], $b['lastName']);
}