按多个字段对多维数组进行排序

编程入门 行业动态 更新时间:2024-10-23 23:32:30
本文介绍了按多个字段对多维数组进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有以下数据:

Array( [0] => Array( [文件名] => def [文件大小] => 4096 [文件时间] => 1264683091 [is_dir] => 1 [is_file] => ; ) [1] =>阵列( [filename] => abc [filesize] = >> 4096 [filemtime] => 1264683091 [is_dir] => 1 [is_file] => ) [2] =>数组( [filename] => Rabbit [文件大小] => 4096 [filemtime] => 1264683060 [is_dir] => 0 [is_file] = >> ) [3] =>数组( [filename] =>猫头鹰 [filesize] => 4096 [filemtime] => 1264683022 [is_dir] => 0 [is_file] => ))

,我想按更多排序多于一个值。 (例如,按is_dir和按文件名(按字母顺序排列)或按filemtime和按文件名等。)

到目前为止,我已经尝试了许多解决方案,但没有一个起作用。 / p>

有人知道最好的PHP算法/函数/方法来排序吗?

解决方案

使用 usort 并传递您自己的比较函数

//示例比较函数 //这将导致一个列表,该列表首先按is_dir排序,然后按is_dir排序通过文件名函数cmp($ a,$ b){ //首先检查is_dir是否相同,这意味着我们可以 //通过定义的另一个因子进行排序(在这种情况下,文件名) if($ a ['is_dir'] == $ b ['is_dir']){ //按文件名比较 return strcmp($ a [' filename'],$ b ['filename']); } //否则用is_dir比较,因为它们不相同,并且 // is_dir优先于文件名 return($ a ['is_dir']< $ b ['is_dir'])吗? -1:1; }

然后您将像这样使用usort:

usort($ myArray, cmp); // $ myArray现在已排序

I have the following data:

Array ( [0] => Array ( [filename] => def [filesize] => 4096 [filemtime] => 1264683091 [is_dir] => 1 [is_file] => ) [1] => Array ( [filename] => abc [filesize] => 4096 [filemtime] => 1264683091 [is_dir] => 1 [is_file] => ) [2] => Array ( [filename] => rabbit [filesize] => 4096 [filemtime] => 1264683060 [is_dir] => 0 [is_file] => ) [3] => Array ( [filename] => owl [filesize] => 4096 [filemtime] => 1264683022 [is_dir] => 0 [is_file] => ) )

and I would like to sort it by more than one value. (e.g. by is_dir AND by filename (alphabetically) or by filemtime AND by filename, etc.)

So far I've tried many solutions, none have which worked.

Does anyone know the best PHP algorhythm/function/method to sort this like so?

解决方案

Use usort and pass your own comparison function to the function.

//example comparison function //this results in a list sorted first by is_dir and then by file name function cmp($a, $b){ //first check to see if is_dir is the same, which means we can //sort by another factor we defined (in this case, filename) if ( $a['is_dir'] == $b['is_dir'] ){ //compares by filename return strcmp($a['filename'], $b['filename']); } //otherwise compare by is_dir, because they are not the same and //is_dir takes priority over filename return ($a['is_dir'] < $b['is_dir']) ? -1 : 1; }

You would then use usort like so:

usort($myArray, "cmp"); //$myArray is now sorted

更多推荐

按多个字段对多维数组进行排序

本文发布于:2023-11-22 13:56:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1617704.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多维   多个   数组   字段

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!