二维数组的排序方法
一维数组排序方法:
公用函数:
function printr($arr)
{
echo '<pre>';
print_r($arr);
echo '</pre><br>';
}
第一组 :sort 和 rsort ,
按照PHP数组键值的顺序asc和逆序desc进行排序,
同时破坏原来数组的索引关系——其实是删除索引之后重新
建立从0开始的数字索引。
$a = array('a'=>1,2);
sort($a); printr($a);
rsort($a); printr($a);
/*Array
(
[0] => 1
[1] => 2
)
Array
(
[0] => 2
[1] => 1
)
*/
第二组函数:asort 和 arsort ,这两个函数就比较厉害一点了,
只要他们可以保留数组原有的索引关系,
把上例的sort 和 rsort 分别用这两个函数替换一下
$a = array('a'=>1,2);
asort($a); printr($a);
arsort($a); printr($a);
/*
Array
(
[a] => 1
[0] => 2
)
Array
(
[0] => 2
[a] => 1
)
*/
第三组PHP数组排序函数:krsort 和 ksort ,
这两个不同于以上两组,这两函数是对键名进行排序的.
$a = array('a'=>1,2);
ksort($a); printr($a);
krsort($a); printr($a);
/*
Array
(
[0] => 2
[a] => 1
)
Array
(
[a] => 1
[0] => 2
)
*/
通过自定义函数对PHP数组进行排序,有三个函数分别是:
uasort 通过自定义函数对PHP数组的键值进行排序,
并且保留原来的索引关系。
uksort 通过自定义函数对PHP数组的键名进行排序,
并且保留原来的索引关系。
usort通过自定义函数对PHP数组的键值进行排序,
并且删除原来的索 引关系,从零开始建立新的索引。
下面是二维排序:
/**
* @package BugFree
* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
*
*
* Sort an two-dimension array by some level two items use array_multisort() function.
*
* sortArr($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
* @author Chunsheng Wang <wwccss@263.net>
* @param array $ArrayData the array to sort.
* @param string $KeyName1 the first item to sort by.
* @param string $SortOrder1 the order to sort by("SORT_ASC"|"SORT_DESC")
* @param string $SortType1 the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")
* @return array sorted array.
*/
function sortArr($ArrayData,$KeyName1,
$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
if(!is_array($ArrayData)) return $ArrayData;
// Get args number.
$ArgCount = func_num_args();
// Get keys to sort by and put them to SortRule array.
for($I = 1;$I < $ArgCount;$I ++)
{
$Arg = func_get_arg($I);
if(!eregi("SORT",$Arg))
{
$KeyNameList[] = $Arg;
$SortRule[] = '$'.$Arg;
}
else $SortRule[] = $Arg;
}
// Get the values according to the keys and put them to array.
foreach($ArrayData AS $Key => $Info)
{
foreach($KeyNameList AS $KeyName)
${$KeyName}[$Key] = strtolower($Info[$KeyName]);
}
// Create the eval string and eval it.
$EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
eval ($EvalString);
return $ArrayData;
}
实例:
//################# 示例 #################
$arr = array(
array(
'name' => '学习',
'size' => '1235',
'type' => 'jpe',
'time' => '1921-11-13',
'class' => 'dd',
),
array(
'name' => '中国功夫',
'size' => '153',
'type' => 'jpe',
'time' => '2005-11-13',
'class' => 'jj',
),
array(
'name' => '编程',
'size' => '35',
'type' => 'gif',
'time' => '1997-11-13',
'class' => 'dd',
),
array(
'name' => '中国功夫',
'size' => '65',
'type' => 'jpe',
'time' => '1925-02-13',
'class' => 'yy',
),
array(
'name' => '中国功夫',
'size' => '5',
'type' => 'icon',
'time' => '1967-12-13',
'class' => 'rr',
),
);
echo '<pre>';
print_r($arr); echo '<br>';
//注意:按照数字方式排序时 153 比 65 小
$temp = sortArr($arr,"name","SORT_ASC","type","SORT_DESC",
"size","SORT_ASC","SORT_STRING");
print_r($temp);
echo '</pre>';