登录  /  注册
首页 > php教程 > PHP源码 > 正文
PHP关联数组排序几种方法
php中文网
发布: 2016-06-08 17:21:51
原创
944人浏览过
对于普通数据排序我们直接使用系统自带数组排序函数即可,如果是关系数组排序你知道如何操作吧?下面来给各位整理了几个例子大家一起来看看吧。

参数说明:$data 目标数组 $key 排序字段, $sort 排序规则

代码如下 复制代码

function getSortArray($data,$key,$sort='ASC')
{
if(!is_array($data))
{
return false;
}

$len = count($data);

for($k=1; $k<$len; $k++)
{
for($j=$len-1,$i=0;$i<$len-$k;$i++,$j--)
{
if(strtoupper($sort) == 'DESC')
{
$flag = $data[$j][$key]>$data[$j-1][$key];
}
else
{
$flag = $data[$j][$key]<$data[$j-1][$key];
}

if($flag)
{
$tmp = $data[$j];
$data[$j] = $data[$j-1];
$data[$j-1] = $tmp;
}
}
}
return $data;
}

使用方法:

$a = array(
array('name'=>'stone','age'=>17,'sex'=>'男'),
array('name'=>'sunny','age'=>28),
array('name'=>'grass','age'=>16,'sex'=>'女'),
array('name'=>'sea','age'=>15,'birthday'=>'1987-08-16')
);
print_r(getSortArray($a,'age','desc'));

结果:
Array

(

[0] => Array

(

[name] => sunny

[age] => 28

)

[1] => Array

(

[name] => stone

[age] => 17

[sex] => 男

)

[2] => Array

(

[name] => grass

[age] => 16

[sex] => 女

)

[3] => Array

(

[name] => sea

[age] => 15

[birthday] => 1987-08-16

)

)

不知道你有没有看懂呢?没懂我们再看两个数组排序例子

要对数组针对age字段进行排序,php自带的简单sort功能函数,显然都不能满足需求,因此需要自己写一个快速排序代码来实现相应的需求。

代码如下 复制代码

/**
* Description:获取中枢点的位置
*
* @param array $array
* @param int $left
* @param int $right
* @param string $field
* @return int
*/
function fetchArrayPivot (&$array, $left, $right, $field)
{
// 基准定义
$stand = $array[$left];

// 遍历数组
while ($left < $right) {
while ($left < $right && $array[$right][$field] >= $stand[$field]) {
$right --;
}
if ($left < $right) {
$array[$left ++] = $array[$right];
}

while ($left < $right && $array[$left][$field] <= $stand[$field]) {
$left ++;
}
if ($left < $right) {
$array[$right --] = $array[$left];
}
}

// 获取中枢点位置
$array[$left] = $stand;

return $left;
}

/**
* Description:快速排序主程序
*
* @param array $array
* @param int $begin
* @param int $end
* @param string $field
*/
function quickSort (&$array, $begin, $end, $field)
{
// 变量定义
$pivot = null;

if ($begin < $end) {
$pivot = fetchArrayPivot($array, $begin, $end, $field);
quickSort($array, $begin, $pivot - 1, $field);
quickSort($array, $pivot + 1, $end, $field);
}
}
2,调用示例:

$array = array(
array(
'name' => "xiao",
'age' => 3
),
array(
'name' => 'wang',
'age' => 1
),
array(
'name' => 'chen',
'age' => 2
),
array(
'name' => 'zhengyi',
'age' => 4
),
array(
'name' => 'chai',
'age' => 14
)
);

$begin = getTime();
quickSort($array, 0, count($array) - 1, 'age');
print_r($array);
$end = getTime();
$spend = $end - $begin;

echo "花费时间为:".$spend."秒n";

function getTime()
{
list($msec, $sec) = explode(" ", microtime());
return (float)$msec + (float)$sec;
}

相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学