对于php自定义二维数组排序函数array_orderby用法示例感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍php二维数组排序,并为您提供关于array_unique二维数组去重二维数组排
对于php自定义二维数组排序函数array_orderby用法示例感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍php 二维数组排序,并为您提供关于array_unique 二维数组去重 二维数组排序 去空白、php array_map array_multisort 高效处理多维数组排序、php array_map array_multisort 高效处理多维数组排序_php技巧、php array_map array_multisort 高效处理多维数组排序_PHP教程的有用信息。
本文目录一览:- php自定义二维数组排序函数array_orderby用法示例(php 二维数组排序)
- array_unique 二维数组去重 二维数组排序 去空白
- php array_map array_multisort 高效处理多维数组排序
- php array_map array_multisort 高效处理多维数组排序_php技巧
- php array_map array_multisort 高效处理多维数组排序_PHP教程
php自定义二维数组排序函数array_orderby用法示例(php 二维数组排序)
本文实例讲述了PHP自定义二维数组排序函数array_orderby用法。分享给大家供大家参考,具体如下:
运行结果:
PS:这里再为大家推荐一款关于排序的演示工具供大家参考:
在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《PHP数学运算技巧总结》
希望本文所述对大家PHP程序设计有所帮助。
array_unique 二维数组去重 二维数组排序 去空白

PHP 中提供了 array_unique 函数去除一维数组中的重复项,但是我们实际的项目开发中,从数据库 select 查询出来的数组经常是二维的;
这里面可能有重复项,这就需要我们自己定义函数进行去除重复项。
思路:
1、首先获取第二维数组的键名,保存在一个数组里面(假设命名为 keyname_Arr);
2、然后使用一个符号做分隔符(比如‘-’),将二维数组里面的键值拼接成一个字符串,生成一个临时数组;
3、然后使用【array_unique () 函数】比较生成的这个临时数组,去掉里面的相同字符串;
4、然后将去除重复后的数组重新组装成二维数组:
在 foreach () 里面循环使用【explode () 函数】,按‘-’分隔符拆分字符串;
同时在 foreach () 里面对拆分出来的字符串所形成的【新的临时数组 tempnew】,再使用一个 foreach ( $tempnew as $tempk =>$tempv),
循环赋值 $output [$k][ $keyname_Arr [ $tempk ] ] = tempv ;
6、最后,$output 即是去除重复后的二维数组。
来点实际代码理解一下:
$keyname_Arr= array_keys(end($resource_arr)); //存储内层数组的键名
//使用''-''作为分隔将数组拼接成字符串
foreach ($resource_arr as $v){
$v = join("-",$v);
$temp[] = $v;
}
//去掉重复的字符串,也就是重复的一维数组
$temp = array_unique($temp);
//再将拆开的数组重新组装
foreach ($temp as $k => $v)
{
$tempnew = explode("-",$v);//拆分去重之后的字符串
foreach($tempnew as $tempkey => $tempval)
$output[$k][$keyname_Arr[$tempkey]] = $tempval;
}
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($records as $record) { $uniqueSortId++; $recordStr = implode("|", $record)."|".$uniqueSortId; $recordArray[] = explode("|", $recordStr); } $primarySortIndex = count($record); $records = $recordArray; foreach($records as $record) { $hash[$record[$primarySortIndex]] = $record[$field]; } uasort($hash, "strnatcasecmp"); if($reverse) $hash = array_reverse($hash, true); $valueCount = array_count_values($hash); foreach($hash as $primaryKey => $value) { $indexedArray[] = $primaryKey; } $i = 0; foreach($hash as $primaryKey => $value) { $i++; if($valueCount[$value] > 1) { foreach($records as $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($tempArr as $newRecs) { $sortedRecords [] = $newRecs; } $tempArr = array(); } } else { foreach($records as $record) { if($primaryKey == $record[$primarySortIndex]) { $sortedRecords[] = $record; break; } } } } return $sortedRecords; }
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.04269016 name
0.04267142 size
第二种方式
0.001249 name
0.00083924 size
结果不言而喻
更多php array_map array_multisort 高效处理多维数组排序相关文章请关注PHP中文网!
立即学习“PHP免费学习笔记(深入)”;
php array_map array_multisort 高效处理多维数组排序_php技巧
对多维数组排序,通用的作法是
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($records as $record)
{
$uniqueSortId++;
$recordStr = implode("|", $record)."|".$uniqueSortId;
$recordArray[] = explode("|", $recordStr);
}
$primarySortIndex = count($record);
$records = $recordArray;
foreach($records as $record)
{
$hash[$record[$primarySortIndex]] = $record[$field];
}
uasort($hash, "strnatcasecmp");
if($reverse)
$hash = array_reverse($hash, true);
$valueCount = array_count_values($hash);
foreach($hash as $primaryKey => $value)
{
$indexedArray[] = $primaryKey;
}
$i = 0;
foreach($hash as $primaryKey => $value)
{
$i++;
if($valueCount[$value] > 1)
{
foreach($records as $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($tempArr as $newRecs)
{
$sortedRecords [] = $newRecs;
}
$tempArr = array();
}
}
else
{
foreach($records as $record)
{
if($primaryKey == $record[$primarySortIndex])
{
$sortedRecords[] = $record;
break;
}
}
}
}
return $sortedRecords;
}