多维数组如果需要按照某个字段值进行排序,可以尝试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(调用对象,自定义函数名称).
 

最新文章

  1. EF 连接sql2000
  2. Jquery 实现input回车时跳转到下一个input元素
  3. 基于CoreText的基础排版引擎
  4. Android网络通信之WiFi Direct
  5. css处理浏览器兼容问题
  6. Android 三种方式实现自定义圆形页面加载中效果的进度条
  7. IOS 8 关于 Touch ID
  8. work_6
  9. 5阻止A默认行为和JS实现页面跳转的方法
  10. php基础知识(很简单一套适合零基础的朋友学习)
  11. 发布Qt Quick桌面应用程序的方法
  12. 【微服务轻量化容器技术相关】同事分享的Docker学习汇总
  13. javaweb入门实例---servlet例子
  14. 2018年1月 常用的linux命令
  15. 第九篇:Map/Reduce 工作机制分析 - 作业的执行流程
  16. MyEclipse中查看struts_spring_hibernate源码
  17. SpringCloud(7)---网关概念、Zuul项目搭建
  18. Vue项目中使用基于Vue.js的移动组件库cube-ui
  19. 「Splay」普通平衡树模板
  20. xshell xftp免费版下载方法

热门文章

  1. MongoDB 操作
  2. 使用 hibernate 存取大对象数据类型(clob和blob)
  3. NHibernate各种数据库连接参数文件配置方法说明
  4. sublime text 2中Windows下编写的脚本在Linux平台上运行遇到字符问题
  5. sql 聚合函数用法,及执行顺序
  6. mysql学习(十)多表查询
  7. Fedora 开启 ssh
  8. SurfaceView绘图机制
  9. JQuery DataTables Editor---只修改页面内容
  10. docker 数据管理<1>