array sort php,php的array_multisort()使用方法介绍

这段时间做数据统计,产品那边要求数据能按高到低排序,想了很多方法,都不行。最后找到PHP的array_multisort()方法。虽然实现了效果,但对这个方法还是半董半董

使用 array_multisort()函数对多个数组或多维数组进行排序的函数,正在研究数组排序、多维数组排序的朋友可以看看。

函数 bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $...]]] )

参数说明: 函数对多个数组或多维数组进行排序

第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志

SORT_ASC - 默认,按升序排列

SORT_DESC - 按降序排列

随后可以指定排序的类型

SORT_REGULAR - 默认。将每一项按常规顺序排列。

SORT_NUMERIC - 将每一项按数字顺序排列。

SORT_STRING - 将每一项按字母顺序排列。

例:

$arr1 = array('10', 11, 100, 100, 'a');

$arr2 = array(1, 2, 3, '2', 5);

array_multisort($arr1, $arr2);

?>

结果为:

$arr1

Array ( [0] => 10 [1] => a [2] => 11 [3] => 100 [4] => 100 )

# '10'在与11, 100, 100比较时转换为整数10,小于其他三个数

# '10'在于'a'比较时作为字符串,其第一个字符'1'ascii码值为49小于‘a'(ascii值为97),所以‘10'为最小元素

# 'a'在于其他三个数字比较时,转换为整数0,小于其他三个数

$arr2

Array ( [0] => 1 [1] => 5 [2] => 2 [3] => 2 [4] => 3 )

# $arr2元素1与$arr1元素'10'位置对应,所以排在[0]位置

# $arr1[2] => 100, $arr1[3] => 100分别对应$arr2元素3, '2'。3大于'2',所以与2对应的$arr1[2] => 100排序后的下标为3,与3对应的$arr1[3] => 100排序的下标为4

总结----------

1.参与排序的数组元素数保持一致

2.排序数组元素位置对应如, ‘10' => 1 , 11 => 2

3.后边的数组在前边数组的顺序的基础上进行排序

4.前边的数组如遇相等的元素则比较后边的数组

下边就是使用的实例,手册上的例子不列了,就我自己工作中的几个。

工作中碰到最多的可能就是二维数组了,想试试三维数组,但是想想还是算了。

header('Content-Type: text/html; charset=utf-8');

echo '

';

//原始数组格式

$array = array(

'key1' => array(

'item1' => '65',

'item2' => '35',

'item3' => '84',

),

'key2' => array(

'item1' => '24',

),

'key3' => array(

'item1' => '38',

'item3' => '45',

),

);

//要排序的键

//按照数组中的 item1进行排序

//你也可以换成item2

$sort = 'item1';

foreach($array as $k => $v)

{

$newArr[$k] = $v[$sort];

}

//这个函数如果执行正确他会直接改变原数组键值的顺序

//如果执行失败,那么他会返回 bool(false)

array_multisort($newArr,SORT_DESC, $array);

var_dump($array);

//---------------------排序后的数组打印效果 开始--------------------

array(3) {

["key1"]=>

array(3) {

["item1"]=>

string(2) "65"

["item2"]=>

string(2) "35"

["item3"]=>

string(2) "84"

}

["key3"]=>

array(2) {

["item1"]=>

string(2) "38"

["item3"]=>

string(2) "45"

}

["key2"]=>

array(1) {

["item1"]=>

string(2) "24"

}

}

//---------------------排序后的数组打印效果 结束---------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值