PHP构建多维数组map,php array_map array_multisort 高效处理多维数组排序

对多维数组排序,通用的作法是

1获取利用排序的数据并且将其放入数组$arrSort.其中键索引为要排序数组的索引,保证唯一性

2利用排序函数sort等对$arrSort进行排序.

3遍历$arrSort,根据其索引,获取多维数组的数据,重新构造排序后的多维数组.

复制代码代码如下:

Array

(

[0]=>Array

(

[link]=>test

[name]=>test.rpm

[type]=>file

[size]=>988.9k

[mtime]=>1185160178)

....

)

I很久以前在网上找到的一个排序函数,谈不上高效,但很实用

复制代码代码如下:

_array_sort($arrFile,1,1);//根据name字段排序

_array_sort($arrFile,3,1);//根据size字段排序

/*

@records要排序的数组

@field要排序的字段,注意是数字

@reverse正序还是反序

*/

function_array_sort($records,$field,$reverse,$defaultSortField=0)

{

$uniqueSortId=0;

$hash=array();

$sortedRecords=array();

$tempArr=array();

$indexedArray=array();

$recordArray=array();

foreach($recordsas$record)

{

$uniqueSortId++;

$recordStr=implode("|",$record)."|".$uniqueSortId;

$recordArray[]=explode("|",$recordStr);

}

$primarySortIndex=count($record);

$records=$recordArray;

foreach($recordsas$record)

{

$hash[$record[$primarySortIndex]]=$record[$field];

}

uasort($hash,"strnatcasecmp");

if($reverse)

$hash=array_reverse($hash,true);

$valueCount=array_count_values($hash);

foreach($hashas$primaryKey=>$value)

{

$indexedArray[]=$primaryKey;

}

$i=0;

foreach($hashas$primaryKey=>$value)

{

$i++;

if($valueCount[$value]>1)

{

foreach($recordsas$record)

{

if($primaryKey==$record[$primarySortIndex])

{

$tempArr[$record[$defaultSortField]."__".$i]=$record;

break;

}

}

$index=array_search($primaryKey,$indexedArray);

if(($i==count($records))||($value!=$hash[$indexedArray[$index+1]]))

{

uksort($tempArr,"strnatcasecmp");

if($reverse)

$tempArr=array_reverse($tempArr);

foreach($tempArras$newRecs)

{

$sortedRecords[]=$newRecs;

}

$tempArr=array();

}

}

else

{

foreach($recordsas$record)

{

if($primaryKey==$record[$primarySortIndex])

{

$sortedRecords[]=$record;

break;

}

}

}

}

return$sortedRecords;

}

II用array_map和array_mutisort来排序

array_mutisort还可以根据多个值来进行二次或者三次排序,这是上一个函数所不能比的.

复制代码代码如下:

利用array_map获取要依据排序的数组

$arrField=array_map(create_function('$n','return$n["size"];'),$arrFile);

//利用array_mutisort来进行排序

$array_multisort($arrField,SORT_DESC,$arrFile);

III最终测试

以188条数据的数组进行测试,排序50次求平均值.

第一种方式

0.04269016name

0.04267142size

第二种方式

0.001249name

0.00083924size

结果不言而喻

您可能感兴趣的文章:php中array_multisort对多维数组排序的方法php专用数组排序类ArraySortUtil用法实例php二维数组排序方法(array_multisortusort)SortingArrayValuesinPHP(数组排序)php数组排序array_multisort与uasort的区别array_multisort实现PHP多维数组排序示例讲解php关于array_multisort多维数组排序的使用说明PHP多维数组排序array详解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值