php 数组进行字典序排序的方法
- 格式:docx
- 大小:3.77 KB
- 文档页数:4
php数组中包含中⽂的排序⽅法php数组中⽂排序,⽂件格式⼀般⽤utf8,直接⽤asort排序不⾏。
若是gbk和gb2312可以。
这跟编码有关。
gbk和gb2312本⾝的编码就是⽤拼⾳排序的。
复制代码代码如下:function utf8_array_asort(&$array) {if(!isset($array) || !is_array($array)) {return false;}foreach($array as $k=>$v) {$array[$k] = iconv('UTF-8', 'GB2312',$v);}asort($array);foreach($array as $k=>$v) {$array[$k] = iconv('GB2312', 'UTF-8', $v);}return true;}使⽤例⼦:复制代码代码如下:$abc = array('a'=>'猜', 'b'=>'我','c'=>'哦','d'=>'棍','e'=>'f','f'=>'爸','z'=>'州');utf8_array_asort($abc);print_r($abc);但是使⽤这个函数发现,有些⽂字会出错,可能是utf8编码认不出某些字导致的“⾮法字符”,据了解GBK字符集⽐较⼤,换成GBK,再加上IGNORE忽略掉不认识的字符,改成下⾯这样复制代码代码如下:private function utf8_array_asort(&$array) {if(!isset($array) || !is_array($array)) {return false;}foreach($array as $k=>$v) {$array[$k] = iconv('UTF-8', 'GBK//IGNORE',$v);}asort($array);foreach($array as $k=>$v) {$array[$k] = iconv('GBK', 'UTF-8//IGNORE', $v);}return true;}。
以下是使用PHP 实现的9个经典的排序算法:1. 冒泡排序```function bubble_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}for ($i = 0; $i < $n; $i++) {for ($j = 0; $j < $n - $i - 1; $j++) {if ($arr[$j] > $arr[$j+1]) {$temp = $arr[$j+1];$arr[$j+1] = $arr[$j];$arr[$j] = $temp;}}}return $arr;}```2. 选择排序```function selection_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}for ($i = 0; $i < $n; $i++) {$minIndex = $i;for ($j = $i+1; $j < $n; $j++) {if ($arr[$j] < $arr[$minIndex]) {$minIndex = $j;}}$temp = $arr[$i];$arr[$i] = $arr[$minIndex];$arr[$minIndex] = $temp;}return $arr;}```3. 插入排序```function insertion_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}for ($i = 1; $i < $n; $i++) {$value = $arr[$i];$j = $i - 1;for (; $j >= 0; $j--) {if ($arr[$j] > $value) {$arr[$j+1] = $arr[$j];} else {break;}}$arr[$j+1] = $value;}return $arr;}```4. 快速排序```function quick_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}$pivotIndex = floor($n/2);$pivot = $arr[$pivotIndex];$left = array();$right = array();for ($i = 0; $i < $n; $i++) {if ($i == $pivotIndex) {continue;} else if ($arr[$i] < $pivot) {$left[] = $arr[$i];} else {$right[] = $arr[$i];}}return array_merge(quick_sort($left), array($pivot), quick_sort($right));}```5. 归并排序```function merge_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}$mid = floor($n/2);$left = array_slice($arr, 0, $mid);$right = array_slice($arr, $mid);$left = merge_sort($left);$right = merge_sort($right);$newArr = array();while (count($left) && count($right)) {$newArr[] = $left[0] < $right[0] ? array_shift($left) : array_shift($right);}return array_merge($newArr, $left, $right);}```6. 堆排序```function heap_sort(&$arr) {$n = count($arr);if ($n <= 1) {return;}build_heap($arr);for ($i = $n-1; $i > 0; $i--) {$temp = $arr[0];$arr[0] = $arr[$i];$arr[$i] = $temp;heapify($arr, 0, $i);}}function build_heap(&$arr) {$n = count($arr);for ($i = floor($n/2)-1; $i >= 0; $i--) {heapify($arr, $i, $n);}}function heapify(&$arr, $i, $n) {$left = 2*$i+1;$right = 2*$i+2;$largest = $i;if ($left < $n && $arr[$left] > $arr[$largest]) {$largest = $left;}if ($right < $n && $arr[$right] > $arr[$largest]) {$largest = $right;}if ($largest != $i) {$temp = $arr[$i];$arr[$i] = $arr[$largest];$arr[$largest] = $temp;heapify($arr, $largest, $n);}}```7. 希尔排序```function shell_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}$gap = floor($n/2);while ($gap > 0) {for ($i = $gap; $i < $n; $i++) {$temp = $arr[$i];for ($j = $i-$gap; $j >= 0 && $arr[$j] > $temp; $j -= $gap) {$arr[$j+$gap] = $arr[$j];}$arr[$j+$gap] = $temp;}$gap = floor($gap/2);}return $arr;}```8. 计数排序```function counting_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}$maxVal = max($arr);$countArr = array_fill(0, $maxVal+1, 0);for ($i = 0; $i < $n; $i++) {$countArr[$arr[$i]]++;}for ($i = 1; $i < $maxVal+1; $i++) {$countArr[$i] += $countArr[$i-1];}$tmpArr = array();for ($i = $n-1; $i >= 0; $i--) {$tmpArr[$countArr[$arr[$i]]-1] = $arr[$i];$countArr[$arr[$i]]--;}for ($i = 0; $i < $n; $i++) {$arr[$i] = $tmpArr[$i];}return $arr;}```9. 桶排序```function bucket_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}$maxVal = max($arr);$bucketSize = 10;$bucketCount = floor($maxVal / $bucketSize) + 1;$buckets = array();for ($i = 0; $i < $bucketCount; $i++) {$buckets[$i] = array();}for ($i = 0; $i < $n; $i++) {$index = floor($arr[$i] / $bucketSize);array_push($buckets[$index], $arr[$i]);}$newArr = array();for ($i = 0; $i < $bucketCount; $i++) {$bucketArr = $buckets[$i];$len = count($bucketArr);if ($len > 1) {sort($bucketArr);}for ($j = 0; $j < $len; $j++) {array_push($newArr, $bucketArr[$j]);}}return $newArr;}```以上就是使用PHP 实现的9个经典的排序算法。
PHP排序算法类讲解PHP排序算法类讲解越来越多的公司喜爱在PHP程序员的笔试题中增加排序算法部分,以此来印证PHP程序的计算机基础。
大家知道PHP排序算法类吗?下面我们就给大家具体介绍一下吧!四种排序算法的PHP实现:1) 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的.记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
2) 选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,挨次放在已排好序的子文件的最终,直到全部记录排序完毕。
3) 冒泡排序的基本思想是:两两比较待排序记录的关键字,发觉两个记录的次序相反时即进行交换,直到没有反序的记录为止。
4) 快速排序实质上和冒泡排序一样,都是属于交换排序的一种应用。
所以基本思想和上面的冒泡排序是一样的。
1. sort.php文件如下:179/**** @author quanshuidingdang*/class Sort {private $arr = array;private $sort = ;private $marker = _sort;private $debug = TRUE;/*** 构造函数** @param array 例如:$config = array (arr = array(22,3,41,18) , //需要排序的数组值sort = , //可能值: , select, bubble, quick debug = TRUE //可能值: TRUE, FALSE)*/public function __construct($config = array) { if ( count($config) 0) {$this-_init($config);}}/*** 猎取排序结果*/public function display {return $this-arr;}/*** 初始化** @param array* @return bool*/private function _init($config = array) {//参数推断if ( !is_array($config) OR count($config) == 0) { if ($this-debug === TRUE) {$this-_log(sort_init_param_invaild);}return FALSE;}//初始化成员变量foreach ($config as $key = $val) {if ( isset($this-$key)) {$this-$key = $val;}}//调用相应的成员方法完成排序$method = $this-sort . $this-marker;if ( ! method_exists($this, $method)) {if ($this-debug === TRUE) {$this-_log(sort_method_invaild);}return FALSE;}if ( FALSE === ($this-arr = $this-$method($this-arr))) return FALSE;return TRUE;}/*** 插入排序** @param array* @return bool*/private function _sort($arr) {//参数推断if ( ! is_array($arr) OR count($arr) == 0) { if ($this-debug === TRUE) {$this-_log(sort_array_invaild);}return FALSE;}//详细实现$count = count($arr);for ($i = 1; $i $count; $i++) {$tmp = $arr[$i];for($j = $i-1; $j = 0; $j--) {if($arr[$j] $tmp) {$arr[$j+1] = $arr[$j];$arr[$j] = $tmp;}}}return $arr;}/*** 选择排序** @param array* @return bool*/private function select_sort($arr) {//参数推断if ( ! is_array($arr) OR count($arr) == 0) { if ($this-debug === TRUE) {$this-_log(sort_array(select)_invaild); }return FALSE;}//详细实现$count = count($arr);for ($i = 0; $i $count-1; $i++) {$min = $i;for ($j = $i+1; $j $count; $j++) {if ($arr[$min] $arr[$j]) $min = $j;}if ($min != $i) {$tmp = $arr[$min];$arr[$min] = $arr[$i];$arr[$i] = $tmp;}}return $arr;}/*** 冒泡排序** @param array* @return bool*/private function bubble_sort($arr) {//参数推断if ( ! is_array($arr) OR count($arr) == 0) { if ($this-debug === TRUE) {$this-_log(sort_array(bubble)_invaild); }return FALSE;}//详细实现$count = count($arr);for ($i = 0; $i $count; $i++) {for ($j = $count-1; $j $i; $j--) { if ($arr[$j] $arr[$j-1]) {$tmp = $arr[$j];$arr[$j] = $arr[$j-1];$arr[$j-1] = $tmp;}}}return $arr;}/*** 快速排序** @param array* @return bool*/private function quick_sort($arr) { //详细实现if (count($arr) = 1) return $arr; $key = $arr[0];$left_arr = array;$right_arr = array;for ($i = 1; $i count($arr); $i++){if ($arr[$i] = $key)$left_arr = $arr[$i];else$right_arr = $arr[$i];}$left_arr = $this-quick_sort($left_arr);$right_arr = $this-quick_sort($right_arr);return array_merge($left_arr, array($key), $right_arr);}/*** 日志记录*/private function _log($msg) {$msg = date[ . date(Y-m-d H:i:s) . ] . $msg . n;return @file_put_contents(sort_err.log, $msg, FILE_APPEND); }}/*End of file sort.php*//*Location htdocs/sort.php */2. sort_demo.php文件如下:14require_once(sort.php);$config = array (arr = array(23, 22, 41, 18, 20, 12, 202303,2200,1192) , //需要排序的数组值sort = select,//可能值: , select, bubble, quickdebug = TRUE//可能值: TRUE, FALSE);$sort = new Sort($config);//var_dump($config[arr]);var_dump($sort-display);/*End of php*/。
PHP数组的排序引导语:为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。
这些按序排列的同类数据元素的*称为PHP数组,以下是小编整理的PHP数组的排序,欢迎参考阅读!数组中的元素能够以字母或数字顺序进行升序或降序排序。
PHP-数组的排序函数在本节中,我们将学习如下PHP数组排序函数:sort()-以升序对数组排序rsort()-以降序对数组排序asort()-根据值,以升序对关联数组进行排序ksort()-根据键,以升序对关联数组进行排序arsort()-根据值,以降序对关联数组进行排序krsort()-根据键,以降序对关联数组进行排序对数组进行升序排序-sort()下面的例子按照字母升序对数组$cars中的元素进行排序:实例<?php$cars=array("Volvo","BMW","SAAB");sort($cars);>下面的例子按照数字升序对数组$numbers中的元素进行排序:实例<?php$numbers=array(3,5,1,22,11);sort($numbers);>对数组进行降序排序-rsort()下面的例子按照字母降序对数组$cars中的元素进行排序:实例<?php$cars=array("Volvo","BMW","SAAB");rsort($cars);>下面的例子按照数字降序对数组$numbers中的元素进行排序:实例<?php$numbers=array(3,5,1,22,11);rsort($numbers);>根据值对数组进行升序排序-asort()下面的例子根据值对关联数组进行升序排序:实例<?php$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); asort($age);>根据键对数组进行升序排序-ksort()下面的例子根据键对关联数组进行升序排序:实例<?php$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); ksort($age);>根据值对数组进行降序排序-arsort()下面的例子根据值对关联数组进行降序排序:实例<?php$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); arsort($age);>根据键对数组进行降序排序-krsort()下面的例子根据键对关联数组进行降序排序:实例<?php$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); krsort($age);>。
关于php利⽤数组中某个字段进⾏排序
⼯作中⽤到了⼀个相关的问题,搜索了百度有好多种⽅法,但是不同⽅法对应的函数不同,试了⼏个发现还是下⾯这个⽐较好⽤:array_multisort($sortarray,SortRank,$sortlist)
$sortarray是⽤来存储排序字段的数组,SortRank是排序条件,有以下两种:
1.SORT_ASC - 默认,按升序排列。
(A-Z)
2.SORT_DESC - 按降序排列。
(Z-A)
$sortlist是需要排序的数组,以遇到的问题为例:
list = [{"name": "⾸页","sort": 1},{"name": "企业管理","sort": 2},{"name": "订单管理","sort": 3}]
foreach($list as $list2){
$sort[]=$list2["sort"];
}
array_multisort($sort,SORT_ASC,$list);
PS:第⼀次⽤这个⽅法的时候以为需要 $new_list = array_multisort($sort,SORT_ASC,$list),
其实不需要,这个函数排序过后,直接使⽤list即可,否则强⾏取变量取出来的可能只有true或者false
PS +1 :这个⽅法其实⽐较适⽤于⼆维数组,维数增多以后⽤起来是个灾难。
php排列组合方法PHP是一种广泛使用的服务器端脚本语言,提供了许多强大的功能来处理排列组合问题。
在本文中,我们将探讨一些用于排列组合的常用方法和技巧,以及如何在PHP中实现它们。
排列组合是一种数学概念,用于计算从给定元素集合中选择特定数量的元素的不同方式。
在PHP中,我们可以使用不同的方法来计算排列组合。
首先,让我们了解两个基本概念 - 排列和组合。
排列是指从给定集合中选择一定数量的元素并按照特定顺序排列的方式。
在PHP中,我们可以使用递归函数来实现排列。
以下是一个示例:```phpfunction permutation($items, $perms = array()) {if (empty($items)) {// 打印排列结果echo implode(' ', $perms) . "\n";} else {for ($i = count($items) - 1; $i >= 0; --$i) {$newitems = $items;$newperms = $perms;list($foo) = array_splice($newitems, $i, 1);array_unshift($newperms, $foo);permutation($newitems, $newperms);}}$items = array('A', 'B', 'C');permutation($items);```上述代码将打印出由元素'A'、'B'和'C'组成的所有可能排列。
使用递归函数可以轻松地计算出给定集合的所有可能排列。
组合是指从给定集合中选择一定数量的元素的不同方式,而不考虑元素的顺序。
在PHP中,我们可以使用递归函数来实现组合。
以下是一个示例:```phpfunction combination($items, $perms = array()) {if (empty($items)) {// 打印组合结果echo implode(' ', $perms) . "\n";} else {combination(array_slice($items, 1), $perms);$newperms = $perms;array_unshift($newperms, $items[0]);combination(array_slice($items, 1), $newperms);}}$items = array('A', 'B', 'C');combination($items);上述代码将打印出由元素'A'、'B'和'C'组成的所有可能组合。
php数组排序以及按照某个字段排序经常,开发⼈员发现在PHP中使⽤这种数据结构对值或者数组元素进⾏排序⾮常有⽤。
PHP提供了⼀些适合多种数组的排序函数,这些函数允许你在数组内部对元素进⾏排列,也允许⽤很多不同的⽅法对它们进⾏重新排序。
在这篇⽂章中我们将讨论该排序中最重要的⼏个函数。
简单排序⾸先,让我们来看看最简单的情况:将⼀个数组元素从低到⾼进⾏简单排序,这个函数既可以按数字⼤⼩排列也可以按字母顺序排列。
PHP 的sort()函数实现了这个功能,如Listing A所⽰:Listing A<?php $data = array(5,8,1,7,2); sort($data); print_r($data); ?>输出结果如下所⽰:Array ([0] => 1[1] => 2[2] => 5[3] => 7[4] => 8)也能使⽤rsort()函数进⾏排序,它的结果与前⾯所使⽤的sort()简单排序结果相反。
Rsort()函数对数组元素进⾏从⾼到低的倒排,同样可以按数字⼤⼩排列也可以按字母顺序排列。
Listing B给我们展⽰了它的⼀个例⼦:Listing B<?php $data = array(5,8,1,7,2);rsort($data); print_r($data);?>它的输出结果如下:Array ([0] => 8[1] => 7[2] => 5[3] => 2[4] => 1)根据关键字排序当我们使⽤数组的时候,经常根据关键字对数组重新排序,从⾼到低。
Ksort()函数就是根据关键字进⾏排序的函数,同时,它在排序的过程中会保持关键字的相关性。
Listing C就是⼀个例⼦:Listing C<?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");ksort($data); print_r($data);?>它的输出结果如下:Array ([DE] => Germany[ES] => Spain[IN] => India[US] => United States)Krsort()函数是根据关键字对数组进⾏倒排,Listing D就是这样的例⼦:Listing D<?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");krsort($data); print_r($data);?>它的输出结果如下:Array ([US] => United States[IN] => India[ES] => Spain[DE] => Germany)根据值排序如果你想使⽤值排序来取代关键字排序的话,PHP也能满⾜你的要求。
在PHP中,将⼀个汉字数组按照拼⾳⾸字母进⾏排序(之前发的这篇博⽂因为含有敏感关键字,只好重发⼀遍了)<?php$str = "我们可以在浏览器中看到,当⿏标移到元素上时,元素开始向右移动,开始⽐较慢,之后则⽐较快,移开时按原曲线回到原点。
";$len = mb_strlen($str);$sta = [];for($i = 0; $i<$len; $i++){$tmp = mb_substr($str,$i,1);if($tmp != " "){array_push($sta,$tmp);}}//将中⽂字符转换成gbk编码,必须先将数组转换为字符串,然后转换编码,最后将字符串反转成数组$sta = eval('return '.mb_convert_encoding(var_export($sta,true), "gbk","utf-8").";");//按数组值进⾏排序sort($sta);//将中⽂字符转换成utf-8编码$sta = eval('return '.mb_convert_encoding(var_export($sta,true), "utf-8", "gbk").";");var_dump($sta);在PHP中,将⼀个汉字数组按照拼⾳⾸字母进⾏排序知识点:1. PHP官⽅⼿册,多字节字符处理 ;2. var_expost函数,输出关于传递给该函数的变量的结构信息,与var_dump的区别是其输出的是合法的php代码。
若第⼆个参数设置为true,则从⽽返回变量的表⽰;3. mb_substr(),获取部分字符串,与substr不同的是,这个函数的分割是以完整的字符分割,⽽substr是以字节来分割的;。
php 数组进行字典序排序的方法
使用PHP数组进行字典序排序的方法
在PHP中,数组是一种非常常见和重要的数据类型,它可以存储多个值,并且可以按照索引或者关联键进行访问。
在某些情况下,我们可能需要对数组进行排序,以便按照一定的顺序进行展示或者处理。
本文将介绍如何使用PHP数组进行字典序排序的方法。
我们需要了解字典序排序的概念。
字典序排序,也称为字母序排序,是一种按照字母顺序对元素进行排序的方法。
在字典序排序中,首先比较第一个字符的大小,如果相同,则比较第二个字符,以此类推,直到找到差异或者比较完所有字符。
在PHP中,我们可以使用sort()函数对数组进行排序。
sort()函数按照元素的值进行排序,默认是按照升序排列。
下面是一个示例:
```php
$fruits = array("apple", "banana", "cherry", "date");
sort($fruits);
foreach ($fruits as $fruit) {
echo $fruit . " ";
}
```
输出结果为:apple banana cherry date
上述示例中,我们创建了一个包含水果名称的数组$fruits,并使用sort()函数对其进行排序。
最后使用foreach循环遍历数组并输出排序结果。
如果我们希望按照字典序降序排序,可以使用rsort()函数。
下面是一个示例:
```php
$fruits = array("apple", "banana", "cherry", "date");
rsort($fruits);
foreach ($fruits as $fruit) {
echo $fruit . " ";
}
```
输出结果为:date cherry banana apple
在上述示例中,我们使用rsort()函数对数组进行降序排序,并使用foreach循环输出排序结果。
除了sort()和rsort()函数之外,PHP还提供了其他一些函数可以对数组进行排序,例如asort()、arsort()、ksort()和krsort()等。
这
些函数在排序时会保留数组的键值关联。
下面是一些示例:
```php
$fruits = array("apple" => 2, "banana" => 4, "cherry" => 1, "date" => 3);
asort($fruits);
foreach ($fruits as $fruit => $quantity) {
echo $fruit . ": " . $quantity . " ";
}
```
输出结果为:cherry: 1 apple: 2 date: 3 banana: 4
在上述示例中,我们创建了一个关联数组$fruits,其中键是水果名称,值是水果的数量。
使用asort()函数对数组进行排序,并使用foreach循环输出排序结果。
除了默认的升序排序,我们还可以通过传递参数来指定其他排序方式。
例如,可以通过在函数名中添加“r”来实现降序排序,或者通过在函数名中添加“k”来按照键进行排序。
下面是一些示例:
```php
$fruits = array("apple" => 2, "banana" => 4, "cherry" => 1,
"date" => 3);
arsort($fruits);
foreach ($fruits as $fruit => $quantity) {
echo $fruit . ": " . $quantity . " ";
}
```
输出结果为:banana: 4 date: 3 apple: 2 cherry: 1
在上述示例中,我们使用arsort()函数对关联数组进行降序排序,并使用foreach循环输出排序结果。
总结一下,使用PHP数组进行字典序排序的方法非常简单。
我们可以使用sort()、rsort()、asort()、arsort()、ksort()和krsort()等函数来对数组进行排序,根据需要选择适合的函数和排序方式。
通过掌握这些方法,我们可以轻松地对数组进行字典序排序,以满足不同的需求。