GVKun编程网logo

php自定义二维数组排序函数array_orderby用法示例(php 二维数组排序)

8

对于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 二维数组排序)

php自定义二维数组排序函数array_orderby用法示例(php 二维数组排序)

本文实例讲述了PHP自定义二维数组排序函数array_orderby用法。分享给大家供大家参考,具体如下:

rush:PHP;"> $field) { if (is_string($field)) { $tmp = array(); foreach ($data as $key => $row) $tmp[$key] = $row[$field]; $args[$n] = $tmp; } } $args[] = &$data; call_user_func_array('array_multisort',$args); return array_pop($args); } /* The sorted array is Now in the return value of the function instead of being passed by reference. */ $data[] = array('volume' => 67,'edition' => 2); $data[] = array('volume' => 86,'edition' => 1); $data[] = array('volume' => 85,'edition' => 6); $data[] = array('volume' => 98,'edition' => 6); $data[] = array('volume' => 67,'edition' => 7); // Pass the array,followed by the column names and sort flags $sorted = array_orderby($data,'volume',SORT_DESC,'edition',SORT_ASC); print_r($sorted) ?>

运行结果:

Array ( [volume] => 98 [edition] => 2 ) [1] => Array ( [volume] => 86 [edition] => 1 ) [2] => Array ( [volume] => 86 [edition] => 6 ) [3] => Array ( [volume] => 85 [edition] => 6 ) [4] => Array ( [volume] => 67 [edition] => 2 ) [5] => Array ( [volume] => 67 [edition] => 7 ) )

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

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:

更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《PHP数学运算技巧总结》

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

array_unique 二维数组去重 二维数组排序 去空白

array_unique 二维数组去重 二维数组排序 去空白

OSC 请你来轰趴啦!1028 苏州源创会,一起寻宝 AI 时代

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 高效处理多维数组排序

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; 
}
登录后复制
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.04269016 name 
0.04267142 size 
第二种方式 
0.001249 name 
0.00083924 size 

结果不言而喻

更多php array_map array_multisort 高效处理多维数组排序相关文章请关注PHP中文网!

立即学习“PHP免费学习笔记(深入)”;

php array_map array_multisort 高效处理多维数组排序_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;
}

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.04269016 name
0.04267142 size
第二种方式
0.001249 name
0.00083924 size

结果不言而喻

php array_map array_multisort 高效处理多维数组排序_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;
}

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.04269016 name
0.04267142 size
第二种方式
0.001249 name
0.00083924 size

结果不言而喻

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/320223.htmlTechArticle对多维数组排序,通用的作法是 1 获取利用排序的数据并且将其放入数组$arrSort. 其中键索引为要排序数组的索引,保证唯一性 2 利用排序函数...

关于php自定义二维数组排序函数array_orderby用法示例php 二维数组排序的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于array_unique 二维数组去重 二维数组排序 去空白、php array_map array_multisort 高效处理多维数组排序、php array_map array_multisort 高效处理多维数组排序_php技巧、php array_map array_multisort 高效处理多维数组排序_PHP教程的相关知识,请在本站寻找。

本文标签: