多维数组如果需要按照某个字段值进行排序,可以尝试array_multisort().但有一个前提,这个字段值的排序是要一定规律的,如字符升序a-z,或者数字降序等等.

现有多维数组如下:
$arr = array(
array(
'id' => 1,
'name' => 'tyr',
'size' => 's',
),
array(
'id' => 2,
'name' => 'aaa',
'size' => 'm',
),
array(
'id' => 3,
'name' => 'aaa',
'size' => 'xl',
),
array(
'id' => 4,
'name' => 'lhf',
'size' => 'l',
),
array(
'id' => 5,
'name' => 'sfd',
'size' => '3xl',
),
);
需要按照服装的尺码大小,由小到大进行排序,尺码如下:
$size=array('xs','s','m','l','xl','xxl','3xl');
此需求如何实现?
可以考虑使用usort系列函数.
快速入门:
 
$num=array(2,3,1);
function myNum($a,$b){//固定格式,$a,$b表示传入数组的子元素
if($a==$b){
return 0;
}
return $a>$b?-1:1;//返回-1表示排在前面,返回1则排在后面
}
usort($num,'myNum');
var_dump($num);
/*结果如下
array(3) {
[0]=>
int(3)
[1]=>
int(2)
[2]=>
int(1)
}
*/
需求实现,如下:
 
function mySort($a,$b){//固定格式
$size=array('xs','s','m','l','xl','xxl','3xl');
$key1=array_search($a['size'],$size);//获取索引值
$key2=array_search($b['size'],$size);
return strnatcmp($key1,$key2);//比较索引值并排序
}
usort($arr,'mySort');
echo '<pre>';
var_dump($arr);
/*
结果如下
array(5) {
[0]=>
array(3) {
["id"]=>
int(1)
["name"]=>
string(3) "tyr"
["size"]=>
string(1) "s"
}
[1]=>
array(3) {
["id"]=>
int(2)
["name"]=>
string(3) "aaa"
["size"]=>
string(1) "m"
}
[3]=>
array(3) {
["id"]=>
int(4)
["name"]=>
string(3) "lhf"
["size"]=>
string(1) "l"
}
[2]=>
array(3) {
["id"]=>
int(3)
["name"]=>
string(3) "aaa"
["size"]=>
string(2) "xl"
}
[4]=>
array(3) {
["id"]=>
int(5)
["name"]=>
string(3) "sfd"
["size"]=>
string(3) "3xl"
}
}
*/
扩展:如何在类(class)中调用自定义的函数
 
class Mysort{
public function sortFunc($arr){
uasort($arr,array($this,'mySort'));
return $arr;
}
 
public function mySort($a,$b){//固定格式
$size=array('xs','s','m','l','xl','xxl','3xl');
$key1=array_search($a['size'],$size);//获取索引值
$key2=array_search($b['size'],$size);
return strnatcmp($key1,$key2);//比较索引值并排序
}
}
 
$arr = array(
array(
'id' => 1,
'name' => 'tyr',
'size' => 's',
),
array(
'id' => 2,
'name' => 'aaa',
'size' => 'm',
),
array(
'id' => 3,
'name' => 'aaa',
'size' => 'xl',
),
array(
'id' => 4,
'name' => 'lhf',
'size' => 'l',
),
array(
'id' => 5,
'name' => 'sfd',
'size' => '3xl',
),
);
$obj=new Mysort();
$res=$obj->sortFunc($arr);
即,传入array(调用对象,自定义函数名称).
 

php多维数组按用户自定义顺序排序uasort()的更多相关文章

  1. PHP 二维数组根据某个字段排序

    二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort  对数组的值按 ...

  2. 三重for循环实现对二维数组的按列排序(JavaScript)

    由C语言联想到的:三重for循环实现对二维数组的按列排序,并且牵扯到数据结构. 自己写的,水平有限,本文属于原创,可能存在错误,忘指正~ function circle() { var a = [ [ ...

  3. PHP 二维数组某个字段进行排序

    /** * @param $arrUsers * @return mixed *二维数组某个字段进行排序 */ function quick_sort($arrUsers) { $sort = arr ...

  4. PHP 按二维数组的键值排序

    /** * 按二维数组的键值排序 * @param unknown $array 二维数组 * @param unknown $key 二维数组的键值 * @param string $order 升 ...

  5. PHP二维数组按某个字段排序

    //准备 二维数组 //按一个字段排序 foreach($rank as $key=>$val){ $dos[$key] = $val['timelength']; } array_multis ...

  6. PHP开发小技巧②—实现二维数组根据key进行排序

    在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...

  7. Java一维与二维数组的拷贝与排序

    Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...

  8. PHP 二维数组根据某个字段排序 复制代码 array_multisort

    //二维数组,按照里面的age从大到小降序,代码如下 <?php header('Content-Type:text/html;Charset=utf-8'); $arrUsers = arra ...

  9. php 二维数组按某字段排序

    思路很重要,最好的方法是查询时按这个字段给你排好,把问题丢给数据库,比如  order by age ,如果遇到中文时需要这样写(mysql) 如:select * from category ord ...

随机推荐

  1. 解决IP地址被占用问题

    问题背景: 在公司一直有同事在抱怨IP地址总是被占用的问题,我决定用技术解决这个问题 解决方案: 1 最开始想在防火墙里面做IP和mac地址绑定,做了几个之后,还是有同事在说IP被占用,后来 分析了一 ...

  2. 去掉UItableview headerview黏性

    //去掉UItableview headerview黏性 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView ...

  3. c#部分常用方法

    此文章不断补充 1.判断该字符串是否存在于字符串数组中 string[] arr = {"aaa","bbb","aba","cc ...

  4. C/S ASP.NET页面传值汇总

    一. QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不 ...

  5. ajax在ie下返回未定义解决方案

    有时候用ajax进行请求,接收到的数据在火狐下很正常,但在ie浏览器下确是undefined,这是因为后端php输入json时没有统一指定contentType头导致的,只需在php文件中加入head ...

  6. Amazon MWS 上传数据 (三) 提交请求

    前面介绍了设置服务和构造请求,现在介绍提交请求. 上传数据,查询上传操作的工作状态,和处理上传操作返回的报告操作使用的Amazon API 分别为:SubmitFeed(),FeedSubmissio ...

  7. [Backbone.js]如何处理Model里面嵌入的Collection?

    写了近半个月的backbone.js代码,从一开始的todo到现在做仿微信的网页聊天,其中最大的困惑就在于如何处理比较复杂的Model,其内嵌了一个或者多个Collections. 假设我们有一个Pe ...

  8. user Collaborative Filtering

    ---恢复内容开始--- 算法步骤: 1.计算用户相似度 2.对于特定用户,选出k个最相似的用户,将这些用户评价过的前k好的物品推荐给该用户   用户相似度 度量: 其中|N(u)|表示用户u评价过的 ...

  9. string 到 wstring的转换

    string 到 wstring的转换_一景_新浪博客     string 到 wstring的转换    (2009-08-10 20:52:34)    转载▼    标签:    杂谈    ...

  10. uva 10051 Tower of Cubes(DAG最长路)

    题目连接:10051 - Tower of Cubes 题目大意:有n个正方体,从序号1~n, 对应的每个立方体的6个面分别有它的颜色(用数字给出),现在想要将立方体堆成塔,并且上面的立方体的序号要小 ...