array_multisort具有自然排序

Der*_* C. 5 php arrays sorting natural-sort

是否可以使用PHP中的自然排序按多列对多维数组进行排序?这是一个例子.假设我有一个2D数组,例如,

$array[1]['Name'] = 'John';
$array[1]['Age'] = '20';
$array[1]['Code'] = 'ABC 12';

$array[2]['Name'] = 'John';
$array[2]['Age'] = '21';
$array[2]['Code'] = 'ABC 1';

$array[3]['Name'] = 'Mary';
$array[3]['Age'] = '20';
$array[3]['Code'] = 'ABC 10';
Run Code Online (Sandbox Code Playgroud)

我想按名称(ASC),然后按年龄(DESC)和代码(ASC)对这个数组进行排序,所有都将自然地排序.基本上这将是自然排序的array_multisort.

我在网上找到了很多关于这个主题的解决方案.不幸的是,它们只支持按一列排序,而不是多列排序.

kla*_*her 6

我认为您必须为此行为实现自定义比较函数:

function myCmp($a, $b) {
 $nameCmp = strnatcasecmp($a['Name'], $b['Name']);
 $ageCmp = strnatcasecmp($a['Age'], $b['Age']);
 $codeCmp = strnatcasecmp($a['Code'], $b['Code']);

 if ($nameCmp != 0) // Names are not equal
   return($nameCmp);

 // Names are equal, let's compare age

 if ($ageCmp != 0) // Age is not equal
   return($ageCmp * -1); // Invert it since you want DESC

 // Ages are equal, we don't need to compare code, just return the comparison result
   return($codeCmp);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话,usort($array, 'myCmp');并应该得到所需的排序