第1章
**PHP技巧
与初学者相比,**PHP程序员做得更好的一件事情是学着从语言中更生僻或者更难以理解的特性中获益。举例来说,尽管我们已经知道如何使用数组,但是对多维数组未必精通:如创建多维数据、对其进行排序等操作。或许我们已经知道如何编写自定义函数,但是不一定知道如何使用递归以及静态变量。本章将讨论这类问题以及其他一些非基础的概念,比如原型文档(heredoc)的语法以及printf()/sprintf()函数族。
1.1 多维数组
由于数组的强大和灵活性,使其在PHP编程中得到了广泛的应用。对于**应用来说,多维数组经常用来解决其他变量类型不能处理的情况。
**个例子将展示如何对一个多维数组进行排序。这是一个常见的应用,而且并没有很多人想象得那么难。第二个例子是创建一个数据库驱动的任务列表(to-do list),如图1-1所示。
1.1.1 多维数组排序
在PHP中,对多个数组进行排序很简单,这归功于sort()、ksort()等相关函数。使用它们,可以对一维数组进行关键字排序、按值排序、逆排序等。但是这些函数不能用于多维数组(至少不会像大家所想象得那样方便)。
假设有一个数组定义如下:
知识拓展:数组的缩写语法
PHP 5.4中新增了数组的缩写语法,这为创建数组提供了一种简便的方式。使用数组的缩写语法的方式也很简单,将调用array()函数替换为方括号即可。举例:
这是一个简单的二维数组(数组的元素本身也是数组),或许我们需要根据key1(数值排序)或key2(字符顺序排序)。为了对多维数组进行排序,我们需要定义自己的排序函数,然后告诉PHP在调用usort()、uasort()或者uksort()的时候使用我们的自定义排序函数。它必须接收两���参数,并且返回一个值表示哪个参数应该排在前面。负数或者false意味着**个参数应该排在第二个参数前面。正数或者true则表示第二个参数应该排在前面。如果值为0,则表示两个参数值相等。
举例来说,为了对前面提到的数组根据**个关键字进行排序,我们的自定义排序函数可以写成这样: