PHP:第四章——数组中的排序函数
<pre> <?php header("Content-Type:text/html;charset=utf-8"); //1) /*sort - 对数组进行升序排序,返回新排好序的数组 原形:bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )*/ /*$b = array ( 0 => 'x', 1 => 'y', 2 => 'd', 3 => 'l'); sort($b);//排序 print_r($b);//结果: Array ( [0] => d [1] => l [2] => x [3] => y )*/ /* 参数说明: 可选的第二个参数 sort_flags 可以用以下值改变排序的行为: 排序类型标记: SORT_REGULAR - 正常比较单元(不改变类型) SORT_NUMERIC - 单元被作为数字来比较 SORT_STRING - 单元被作为字符串来比较 SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。 SORT_NATURAL - 和 natsort() 类似对每个单元以"自然的顺序"对字符串进行排序。 PHP 5.4.0 中新增的。 SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串 */ //例: /*$a = array ( 'x', 'd', 'X'); sort($a, SORT_STRING|SORT_FLAG_CASE); print_r($a); */ // X区分大小写时候小于 d, 在不区分大小写时候 d<X //结果:Array ( [0] => d [1] => X [2] => x ) //2) /* rsort — 对数组逆向排序,是按降序排序,其他与sort等同 原形:bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) */ //例: /*$a = array ( 'x', 'y', 'd', 'l'); rsort($a); print_r($a);//结果:Array ( [0] => y [1] => x [2] => l [3] => d ) */ //3) asort与arsort - 经常保留原有的键值更有意义 /*$a = array (1=>168, 2=>58, 3=>99 ); asort($a); print_r($a); //输出:Array ( [2] => 58 [3] => 99 [1] => 168 ) //倒序用arsort($a) 即可得到:Array ( [1] => 168 [3] => 99 [2] => 58 ) */ //4)shuffle将数组打乱: //功能:将数组打乱 //例: /*$a = range (1,54); //54张牌用 54个编号描述 shuffle($a); $i =0; $k =0; foreach($a as $v){ echo $v," "; $i++; if($i%17 == 0){ $k++; echo ":玩家$k <br>------<br>"; } } */ //5) array_rand 随机函数 /*$a = array('d','l','x','y'); $ky=array_rand($a); //注意他返回的是 键名,或者是包含键名的数组 var_dump($a[$ky]);*/ /*$a = array('d','l','x','y'); $ky=array_rand($a,2); //取两个随机键名 var_dump($ky);*/ //6)array_multisort()对多个数组或多维数组进行排序 //例: /*$ar1 = array(10, 100, 100, 0); $ar2 = array(1, 3, 2, 4); array_multisort($ar1, $ar2); var_dump($ar1); var_dump($ar2);*/ //输出如下 /*array (size=4) 0 => int 0 1 => int 10 2 => int 100 3 => int 100 array (size=4) 0 => int 4 1 => int 1 2 => int 2 3 => int 3*/ //例: /*$ar = array( array("10", 11, 100, 100, "a"), array( 1, 2, "2", 3, 1) ); array_multisort($ar[0], SORT_ASC, SORT_STRING,$ar[1], SORT_NUMERIC, SORT_DESC); var_dump($ar);*/ //6)natsort 自然排序 /*$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png"); asort($array1); print_r($array1); natsort($array2); print_r($array2); */ //输出: /*Array ( [3] => img1.png [1] => img10.png [0] => img12.png [2] => img2.png )*/ /*Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )*/ //7) natcasesort 自然排序不区分大小写 //8) usort - 使用用户自定义的比较函数对数组中的值进行排序 /*function cmp($a, $b){ if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; } $a = array(3, 2, 5, 6, 1); usort($a, "cmp"); foreach ($a as $key => $value) { echo "$key: $value\n"; }*/ //输出: /*0: 1 1: 2 2: 3 3: 5 4: 6*/ ?>
<pre> <?php header("Content-Type:text/html;charset=utf-8"); /*知识点一:数组排序函数应用场景 应用场景:经常从数据库读出的数据,会保存到数组中,对这些数据排序就非常实用。 例如:按产品销量、人气、价格、等进行从高到低或从低到高的排序。 知识点二:数组排序 数组函数中有基于键来排序也有基于值来排序的 ,以下几个问题也很值得注意。 1) 排序之后键和值之间的关联关系是否能够保持, 是指排序之后数组的键可能 会被重置为数字型的(0,1,2 ...)。 2) 排序的顺序有:字母表顺序, 由低到高(升序),由高到低(降序), 数字排序,自然排序,随机顺序或者用户自定义排序。 3) 注意:下列的所有排序函数都是直接作用于数组本身, 而不是返回一个新的有序的数组。 4) 以下函数对于数组中相等的元素,它们在排序后的顺序是未定义的。 (也即相等元素之间的顺序是不稳定的)。 知识点三:按值排序的函数 sort() 由低到高,重新索引(所有从新索引的原键都丢失,下面不在重复说明) rsort() 由高到低,重新索引 asort() 由低到高,保留原来键值对关系 arsort() 由高到低,保留原来键值对关系 usort() 由用户定义,重新索引 uasort() 由用户定义,保留原来键值对关系 shuffle() 随机相关函数有array_rand() natsort() 自然排序 natcasesort() natcasesort() 自然排序,大小写不敏感 natsort() array_multisort() 键值关联的保持,数字类型的不保持 第一个数组或者由选项指定 知识点四:按键排序的函数,都能够保留键值对应关系 krsort() 由高到低 ksort() 由低到高 uksort() 由用户定义 uasort() 说明:以上函数记忆方法 sort 排序 r代表倒序, reverse 的简写 k代表键, key 的简写 a代表管理, association 简写 u代表用户, user 的简写 nat自然排序, natural 自然的简写 shuffle:洗牌,随机*/ ?>