购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 多维数组排序

使用PHP开发应用,几乎就是一直跟数组打交道。PHP数组的强大和灵活性能够解决大部分应用的问题。在数组编程中,常用的有sort()、ksort()等相关函数,使用它们就可以很方便地处理一维数组,比如按键值降序和升序排列。

这些函数不能用于多维数组,但是在开发中常常是对多维数组排序处理。下面我们定义一个二维数组,如代码清单1-3所示:

代码清单1-3 定义一个标准二维数组


<php
$a = array 
        array"sky" "blue"),
        array"apple" "red"), 
        array"tree" "green"
   );
   >

这是一个简单的二维数组,数组的元素也是数组。我们可能需要对userid这个键排序,或者按汉字或英文字符排序。

为了给多维数组进行排序,我们需要自定义排序函数,然后再调用sort()、usort()、ksort()这些函数,让这些函数使用自定义函数。

uasort函数接受两个参数,并且返回一个值表示哪个参数应该排在前面。负数或FALSE意味着第一个参数应该排在第二个参数之前。正数或者TRUE表示第二个参数应该排在前面,如果值为0,则表示两个参数相等。

下面,我们对前面的数组第一个键进行排序,代码清单1-4是一个自定义函数。

代码清单1-4 将数组按键值排序的自定义函数


function my_compare$a $b { 
if $a[1] < $b[1] {
        return -1 
    }else if $a[1] == $b[1]{ 
        return 0 
    }else{ 
        return 1
    } 
}

这样一来,我们可以后面使用uasort调用这个自定义函数:


uasort$a 'my_compare');
  

PHP会把内层数组不断地发送给此自定义函数,从而将它排序完成。想要了解排序细节,可以输出函数里被比较的数值,由此我们可以看出自定义排序是如何被调用的。代码清单1-5是脚本的完整代码。

代码清单1-5 多维数组排序 w4Yg1oWm8vKLaWu5QoIoRHT7EC4boKIvznjNv4To2HaSIN/1mTA7xw8I90iPOLli


<php
//定义多维数组
$a = array 
       array"sky" "blue"), 
       array"apple" "red"), 
       array"tree" "green"
   ); 
//自定义数组比较函数,按数组的第二个元素进行比较
function my_compare$a $b { 
    if $a[1] < $b[1] {
        return -1 
    }else if $a[1] == $b[1]{ 
        return 0 
    }else{ 
        return 1
    } 
} 
//排序
usort$a 'my_compare'); 
//输出结果
foreach$a as $elem { 
    echo "$elem[0]  $elem[1]<br />" 
}

点击中间区域
呼出菜单
上一章
目录
下一章
×