php 对于一维数组的排序有 俩种情况,一种是按值排序,一种是按键值, 其中不同的排序函数有不同的用法,有的会失去索引关系,有的会保持索引关系。但是都比较方便。
对于多维数组来说,就需要自己定义排序函数。其实就感觉像c,c++ 那样。对结构体之类的进行排序。
对于数组排序来说,分俩种情况,一种是对数字排序,一种是对字符串进行排序。
对数字进行排序
<?php
function numSort($x,$y){
return $x['a'] < $y['a'];
}
$array = array(
'a'=>array('a'=>1,'b'=>'a'),
'b'=>array('a'=>2,'b'=>'b'),
'c'=>array('a'=>3,'b'=>'c'),
'd'=>array('a'=>4,'b'=>'d')
);
var_dump($array);
echo "<hr>";
usort($array,'numSort');
var_dump($array);
?>
array 'a' => array 'a' => int 1 'b' => string 'a' (length=1) 'b' => array 'a' => int 2 'b' => string 'b' (length=1) 'c' => array 'a' => int 3 'b' => string 'c' (length=1) 'd' => array 'a' => int 4 'b' => string 'd' (length=1)
array 0 => array 'a' => int 4 'b' => string 'd' (length=1) 1 => array 'a' => int 3 'b' => string 'c' (length=1) 2 => array 'a' => int 2 'b' => string 'b' (length=1) 3 => array 'a' => int 1 'b' => string 'a' (length=1)
发现索引关系没了。如果要保持索引关系,那么使用uasort就可以了。
对于字符串的排序,就需要考虑的字典序。
<pre name="code" class="php"><?php
function keySort($x,$y){
return strcasecmp($y['b'], $x['b']);//不区分大小写
}
$array = array(
'a'=>array('a'=>1,'b'=>'a'),
'b'=>array('a'=>2,'b'=>'b'),
'c'=>array('a'=>3,'b'=>'c'),
'd'=>array('a'=>4,'b'=>'d')
);
var_dump($array);
echo "<hr>";
usort($array,'keySort');
var_dump($array);
?>
'a' => array 'a' => int 1 'b' => string 'a' (length=1) 'b' => array 'a' => int 2 'b' => string 'b' (length=1) 'c' => array 'a' => int 3 'b' => string 'c' (length=1) 'd' => array 'a' => int 4 'b' => string 'd' (length=1)
array 0 => array 'a' => int 4 'b' => string 'd' (length=1) 1 => array 'a' => int 3 'b' => string 'c' (length=1) 2 => array 'a' => int 2 'b' => string 'b' (length=1) 3 => array 'a' => int 1 'b' => string 'a' (length=1)
对键值排序
<pre name="code" class="php"><?php
function keySort($x,$y){
return strcasecmp($y, $x);//不区分大小写
}
$array = array(
'a'=>array('a'=>4,'b'=>'d'),
'b'=>array('a'=>3,'b'=>'c'),
'c'=>array('a'=>2,'b'=>'b'),
'd'=>array('a'=>1,'b'=>'a')
);
var_dump($array);
echo "<hr>";
uksort($array,'keySort');
var_dump($array);
?>
array 'a' => array 'a' => int 4 'b' => string 'd' (length=1) 'b' => array 'a' => int 3 'b' => string 'c' (length=1) 'c' => array 'a' => int 2 'b' => string 'b' (length=1) 'd' => array 'a' => int 1 'b' => string 'a' (length=1)
array 'd' => array 'a' => int 1 'b' => string 'a' (length=1) 'c' => array 'a' => int 2 'b' => string 'b' (length=1) 'b' => array 'a' => int 3 'b' => string 'c' (length=1) 'a' => array 'a' => int 4 'b' => string 'd' (length=1)
php 数组还是很强大。感觉学习不少