加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-11-02 14:31:09 所属栏目:PHP教程 来源:转载
导读: 本文实例讲述了PHP实现的多维数组排序算法。分享给大家供大家参考,具体如下:
突然想起了一道面试题PHP数组排序,把一个多维数组排序。
例:
//有一个多维数组
$a = array(
array('ke

本文实例讲述了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程序设计有所帮助。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!