gpt4 book ai didi

php - 使用升序、降序、常规、数字和自然排序的组合按多列对关联数组的数组进行排序

转载 作者:可可西里 更新时间:2023-11-01 13:56:21 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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);
}

然后您可以调用 usort($array, 'myCmp'); 并且应该得到所需的排序

关于php - 使用升序、降序、常规、数字和自然排序的组合按多列对关联数组的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com