首页 > 编程语言 > 详细

PHP数组函数usort()、uasort()、uksort()的基本理解和使用

时间:2021-05-21 17:47:44      阅读:21      评论:0      收藏:0      [点我收藏+]

数组排序函数 asort() 和 ksort() 只能用于一维数组。

二维数组的排序就可以 配合usort()、uasort()或者uksort()的使用我们的自定义排序函数。它必须接受两个参数,并且返回一个值表示哪个参数应该排在前面。负数或者false意味着第一个参数应该排第二个参数前面。正式或者true则表示第二个参数应该排在前面。如果值为0,则表示两个参数值相等。

<?php
function my_sort($a,$b)
{
if ($a==$b) return 0;
   return ($a<$b)?-1:1;
}

$a=array(4,2,8,6);
usort($a,"my_sort");

$arrlength=count($a);
for($x=0;$x<$arrlength;$x++)
   {
   echo $a[$x];
   echo "<br>";
   }

?> 

输出结果

2
4
6
8

usort()、uasort()或者uksort()的区别:

usort() 使用用户自定义的比较函数对数组进行排序。

uasort() 使用用户自定义的比较函数对数组按键值进行排序。

uksort() 函数使用用户自定义的比较函数按照键名对数组排序,并保持索引关系

 

uasort()的使用

<?php
    function compareByMargin($aryA, $aryB){
        if($aryA[‘margin‘] == $aryB[‘margin‘]){
            return 0;
        }
        return ($aryA[‘margin‘] < $aryB[‘margin‘]) ? -1 : 1;
    }

    function sortxxx(){
        $ary = array(
            array(‘id‘ => 1, ‘margin‘ => 100),
            array(‘id‘ => 2, ‘margin‘ => 300),
            array(‘id‘ => 3, ‘margin‘ => 200),
        );
        uasort($ary, ‘compareByMargin‘);
    }
    
    sortxxx();

返回结果  [ 根据 二维数组的 键margin的值的大小  排序 ]

array {
  [0]=> {
    ["id"]=> 1
    ["margin"]=> 100
  }
  [2]=> {
    ["id"]=> 3
    ["margin"]=> 200
  }
  [1]=> {
    ["id"]=> 2
    ["margin"]=> 300
  }
}

遇到的问题:

在类中使用 uasort() 函数时发现报了错误:Warning: uasort() expects parameter 2 to be a valid callback ..., 然而直接在纯 php 页面测试的时候发现又没问题.

 解决方案如下: 在类里这样调用:uasort($ary, array($this,"compareByMargin")) 就可以了.

在类中写成闭包函数的形式

           uasort($rows, function ($a, $b) use ($sort) {
                $itemA = isset($a[$sort]) ? $a[$sort] : null;
                $itemB = isset($b[$sort]) ? $b[$sort] : null;

                return strcasecmp($itemA, $itemB);
            });

补充: strcasecmp()  比较两个字符串(不区分大小写)

            strcmp()  比较两个字符串(区分大小写)

 

uksort() :

如果成功则返回 TRUE,否则返回 FALSE。

如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。

自定义函数应接受两个参数,该参数将被数组中的一对键名填充。比较函数在第一个参数小于,等于,或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。

 

自定义函数:

函数必须设计为返回 -1, 0, 或 1,并应该接受两个供比较的参数,同时以类似下面这样的方式来工作:

  • 如果 a = b, 返回 0
  • 如果 a > b, 返回 1
  • 如果 a < b, 返回 -1

 

 

例子:

<?php
function my_sort($a, $b)
  {
  if ($a == $b) return 0;
  return ($a > $b) ? -1 : 1;
  }

$people = array("Swanson" => "Joe", 
"Griffin" => "Peter", "Quagmire" => "Glenn",
"swanson" => "joe", "griffin" => "peter",
"quagmire" => "glenn"); 

uksort($people, "my_sort");

print_r ($people);
?>
Array
(
[swanson] => joe
[quagmire] => glenn
[griffin] => peter
[Swanson] => Joe
[Quagmire] => Glenn
[Griffin] => Peter
)

PHP数组函数usort()、uasort()、uksort()的基本理解和使用

原文:https://www.cnblogs.com/cx1992/p/14794139.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!