php 多个数组排序算法,PHP实现的多维数组排序算法分析

本文实例讲述了PHP实现的多维数组排序算法。分享给大家供大家参考,具体如下:

突然想起了一道面试题,把一个多维数组排序。

例:

//有一个多维数组

$a = array(

array('key1'=>940, 'key2'=>'blah'),

array('key1'=>23, 'key2'=>'this'),

array('key1'=>894, 'key2'=>'that')

);

//那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, 'myfunction')函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册

//1.对key1的值进行排序

function asc_key1_sort($x, $y) {

//可以输出一下看看是怎么比较的

echo 'Iteration:'.$x['key1'].' vs '.$y['key1'];

if($x['key1'] > $y['key1']) {

echo 'true
';

return true;

}elseif($x['key1'] < $y['key1']) {

echo 'false
';

return false;

}else {

echo '0';

return 0;

}

}

//进行排序

usort($a, 'asc_key1_sort');

var_dump($a);

//2.对key2字符进行排序

function asc_key2_sort($x, $y) {

//可以使用strcasecmp()函数进行排序

echo 'Iteration:'.$x['key2'].' vs '.$y['key2'].'
';

return strcasecmp($x['key2'], $y['key2']);

}

//进行排序

usort($a, 'asc_key2_sort');

var_dump($a);

?>

运行结果:

Iteration:23 vs 940false

Iteration:894 vs 23true

Iteration:940 vs 23true

Iteration:894 vs 940false

array(3) { [0]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } } Iteration:that vs this

Iteration:blah vs that

array(3) { [0]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } }

如果我的多维数组中也有key值呢?

//有一个多维数组

$a = array(

123 => array('key1'=>940, 'key2'=>'blah'),

349 => array('key1'=>23, 'key2'=>'this'),

43 => array('key1'=>894, 'key2'=>'that')

);

//那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, 'myfunction')函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册

//1.对key1的值进行排序

function asc_key1_sort($x, $y) {

//可以输出一下看看是怎么比较的

echo 'Iteration:'.$x['key1'].' vs '.$y['key1'];

if($x['key1'] > $y['key1']) {

echo 'true
';

return true;

}elseif($x['key1'] < $y['key1']) {

echo 'false
';

return false;

}else {

echo '0';

return 0;

}

}

//进行排序

usort($a, 'asc_key1_sort');

var_dump($a);

//2.对key2字符进行排序

function asc_key2_sort($x, $y) {

//可以使用strcasecmp()函数进行排序

echo 'Iteration:'.$x['key2'].' vs '.$y['key2'].'
';

return strcasecmp($x['key2'], $y['key2']);

}

//进行排序

usort($a, 'asc_key2_sort');

var_dump($a);

?>

运行结果:

Iteration:23 vs 940false

Iteration:894 vs 23true

Iteration:940 vs 23true

Iteration:894 vs 940false

array(3) { [0]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } } Iteration:that vs this

Iteration:blah vs that

array(3) { [0]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } }

这样的排序结果不会保留123,349,43。这时候只要把usort()换成uasort就好啦!

PS:这里再为大家推荐一款关于排序的演示工具供大家参考:

希望本文所述对大家PHP程序设计有所帮助。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值