`
80x86
  • 浏览: 109738 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

php usort

阅读更多
这个函数很倒霉,不容易控制

手册上确实是举例说明usort了,但是只是说,callback $cmp_function 返回值小于、等于、大于,表示第一个参数比第二个小、等、大。
可是在实践中,使用float比较、string直接比较,都会导致usort的行为不正常,就是无法正确的排序,
即使是使用float值比较,然后返回1,-1,0,都是不可以的,所以只能先把float转成int来比较
真是不知道如果我的float不是全部round 2的话,我怎么转化成int,只能自己写个冒泡了。。。






??? public static function tksort(&$arr, $strColumnName, $strOrder = 'ASC') {
??????? usort($arr, array(new TKSorter($strColumnName, $strOrder), "compare"));
??? }

/**
?* The class for sorting by some int columns.
?*
?*/
class TKSorter {
??? private $_cname;
??? private $_order = 'ASC';
??? // see http://80x86.cn/article.asp?id=1761
??? private $_multi = 100; // round is (, 2), so we just multiply 100 here
??? public function __construct($strColumnName, $strOrder = 'ASC', $intMulti = 100) {
??????? $this->_cname = $strColumnName;
??????? $this->_order = $strOrder;
??????? $this->_multi = $intMulti;
??? }
??? public function compare($a, $b) {
??????? if (is_numeric($a[$this->_cname]) && is_numeric($b[$this->_cname])) { // both are numbers
??????????? $dblM = (int)($a[$this->_cname] * $this->_multi) - (int)($b[$this->_cname] * $this->_multi);
??????????? if ($this->_order == 'ASC') {
??????????????? return $dblM;
??????????? } else {
??????????????? return 0 - $dblM;
??????????? }
??????? } else {
??????????? // 强行转化!
??????????? $va = (int)(((double)$a[$this->_cname]) * $this->_multi);
??????????? $vb = (int)(((double)$b[$this->_cname]) * $this->_multi);
??????????? $dblM = $va - $vb;
??????????? if ($this->_order == 'ASC') {
??????????????? return $dblM;
??????????? } else {
??????????????? return 0 - $dblM;
??????????? }
??????? }
??? }
}
?
分享到:
评论

相关推荐

    php usort 使用用户自定义的比较函数对二维数组中的值进行排序

    在PHP中,`usort()` 是一个非常有用的内置函数,它允许我们使用用户自定义的比较函数对数组进行排序。这个功能特别适用于处理复杂的数据结构,比如二维数组,特别是当数组中的元素需要根据某些特定标准排序时。在...

    php数组排序usort、uksort与sort函数用法

    PHP提供了多个内置函数来对数组进行排序,其中比较常用的包括sort()、usort()和uksort()。通过了解和掌握这些函数的用法,开发者可以高效地组织和管理数据集合。 sort()函数是一种非常基础且广泛使用的数组排序方法...

    PHP中usort在值相同时改变原始位置问题的解决方法

    从 PHP 4.1.0 后,usort 在比较的值相同时,原始位置可能会改变,文档中是这样说的: If two members compare as equal, their order in the sorted array is undefined. 也就是说,如果比较的2个值相同,则它们在...

    php二维数组排序方法(array_multisort usort)

    本文将介绍两种常见的二维数组排序方法:`array_multisort` 和 `usort`。 首先,我们来看一个二维数组的例子: ```php $users = array( array('name' => 'tom', 'age' => 20), array('name' => 'anny', 'age' =>...

    全国城市json 有拼音.txt

    usort($cities, function($a, $b) { return strcmp($a['pinyin'], $b['pinyin']); }); ``` 这将按照拼音字母顺序对城市进行排序。 ### 应用场景 这类数据在实际应用中有广泛的应用场景,如: 1. **网站或应用...

    PHP实例开发源码-人事管理系统 php版.zip

    绩效评估可能涉及到评分系统和排名算法,PHP的排序函数如usort()和array_multisort()在此发挥了作用。同时,系统可能还需要记录历史绩效,这就需要掌握数据库事务处理和版本控制。 权限控制是系统安全的关键,PHP的...

    php小练习实例

    10. **order.php**:这可能是关于排序算法的练习,比如使用PHP的`sort()`, `rsort()`, `usort()`等函数对数组进行升序或降序排列。 通过这些小练习,初学者可以逐步掌握PHP的核心概念,包括变量、数据类型、流程...

    PHP 多维数组排序(usort,uasort)

    总的来说,PHP中的`usort`, `uasort`和`uksort`提供了强大的排序功能,能够应对各种复杂的数据结构。通过自定义比较函数,我们可以灵活地根据多维数组的不同部分进行排序,这对于数据处理和分析来说是非常有用的工具...

    (已失效,代码仅供学习)php采集58,赶集网,搜房网,安居客(个人房源)

    PHP的`usort()`函数用于对数组进行用户自定义排序。在数据采集过程中,可能会获取到多维度的数据结构,如数组内的数组。`usort()`允许我们提供一个回调函数来定义排序规则,这对于处理复杂的数据结构非常有用。例如...

    Algorithm-PHP-algorithm.zip

    PHP内置的`sort()`、`rsort()`、`usort()`等函数就是对这些排序算法的封装。 算法的效率对于大型数据集尤其关键。例如,当处理大量数据库记录或数组时,正确选择和优化算法可以显著提高程序的运行速度。PHP中的二分...

    使用php对二维数组按数组值进行排序

    在PHP 5.4及更高版本中,我们可以使用`usort()`函数来实现自定义排序。`usort()`函数允许我们传递一个比较函数,该函数用于定义如何比较数组中的元素。对于二维数组,我们需要定义一个函数来比较两个子数组的特定值...

    php 7 编程实战源码

    - ** spaceship()** 函数用于比较数组或对象,替代了旧的`sort()`和`usort()`。 - **void** 关键字用于声明不返回任何值的函数。 - **List()** 语句的改进,支持多维数组解包。 5. **统一异常处理**:在PHP 7中...

    PHP实例开发源码-PHP中文搜索工具.zip

    在PHP中,可以使用数组排序函数如usort或asort来定制排序规则。 最后,用户界面的交互设计也是必不可少的。"使用须知.txt"文件可能是对如何使用这个搜索工具的一些说明,包括输入查询、查看结果、筛选和排序等功能...

    全文搜索PHP源代码

    - 使用PHP的`usort()`函数自定义排序逻辑。 7. **优化与性能** - 对于大量文件,考虑使用数据库(如MySQL)存储索引,以利用其内置的索引和查询优化功能。 - 考虑使用缓存机制,如Redis或Memcached,来存储最近...

    php对xml文件增删改查,对xml数据进行分页

    usort($xml->item, function ($a, $b) { return strcmp((string)$b, (string)$a); }); foreach ($xml->item as $item) { echo $item . PHP_EOL; } ``` 分页处理XML数据时,通常需要知道总记录数和每页显示的条目...

Global site tag (gtag.js) - Google Analytics