第三章 使用数组(3)
2016-07-22 13:02 yojiaku 阅读(152) 评论(0) 编辑 收藏 举报- 多维数组的排序
用户定义排序:像下面的代码,我们知道各个数组内容所代表的意义,所以至少有两种有用的排序方法。我们可以对产品的说明按字母排序,也可以对价格的大小排序,我们需要使用
函数usort()告诉PHP如何比较各个元素。
//create a two-dimensional array $products7 = array(array('TIR','Tires',100), array('OIL','Oil',10), array('SPK','Spark Plugs',4)); //compile a function to compare x and y function compare($x,$y){ if ($x[1]==$y[1]){ return 0; }else if($x[1]<$y[1]){ return -1; }else{ return 1; } } //use function compare to sort the array usort($products7,'compare');
explain:我们用关键词function定义一个函数,需要给出函数的名称,这里名称为"compare",compare()函数带有两个参数 "$x","$y" ,在这里,$x,$y将是主数组中的两个子数组,分别代表一种产品。
因为计数是从0开始的,说明字段是这个数组的第二个元素,所以为了访问数组$x的说明字段(Tires,Oil,Spark Plugs),需要输入$x[1]和$y[1]来比较两个传递给函数的数组的说明字段。
usort()中的"u"代表"user",因为 这个函数要求传入用户定义的比较函数('compare')。
上面的代码没有产生任何输出,我们依旧用双重for循环来输出这个数组:
//show this array in the browser for($row = 0;$row < 3;$row++){ for($column = 0;$column < 3;$column++){ echo " ".$products7[$row][$column]; } echo "<br />"; }
显示结果为:
我们注意到,这是按照字母O,S,T的大小来排序的。
反向用户排序:函数sort(),asort(),ksort()都分别对应着一个带字母"r"的反向排序函数。但是用户定义的排序没有反向变体,但我们可以编写一个能够返回相反值得比较函数,例如:
function reverse_compare($x,$y){ if ($x[1]==$y[1]){ return 0; }else if($x[1]>$y[1]){ return -1; }else{ return 1; } }
- 对数组进行重新排序
使用shuffle()函数:我们依旧用Bob汽车商店的例子——Bob想让其网站首页上的产品能够反映出公司的特色。(他拥有许多产品,但希望能够随机地选出3种产品显示在首页上,为了
不至于让多次登录的访问者感到厌烦,他想让每次访问看到的3中产品都不同)
下面给出程序代码:程序清单3-1 Bob's_front_page.php —— 使用PHP为Bob的汽车配件商店制作一个动态首页
<?php $pictures = array('tire.jpg', 'oil.jpg', 'spark_plug.jpg', 'door.jpg', 'steering_wheel.jpg', 'thermostat.jpg', 'wiper_blade.jpg', 'gasket.jpg', 'brake_pad.jpg'); shuffle($pictures); ?> <html> <head> <title>Bob's Auto Parts</title> </head> <body> <h1>Bob's Auto Parts</h1> <div align="center"> <table width="100%"> <tr> <?php for($i = 0;$i < 3;$i++){ echo "<td align=\"center\"><img src=\""; echo $pictures[$i]; echo "\"/></td>"; } ?> </tr> </table> </div> </body> </html>
这是文件目录:
效果展示:
使用array_reserve()函数:使用一个数组作参数,返回一个内容与参数数组相同但顺序相反的数组。例如,可以用很多方法创建一个按逆序包含数字10到1的数组。
第一种:单独使用range()函数创建一个升序的数组,再用rsort()函数或者array_reserve()函数将数组中的数字变为降序;
第二种:使用for循环通过一次一个元素的方式创建这个数组,
$numbers = array(); for($i = 10;$i > 0;$i--){ $numbers[] = $i; } print_r($numbers);
示例结果:
注意:可以使用array_push()函数,像这样:
$stack = array("orange", "banana"); array_push($stack, "apple", "raspberry"); print_r($stack);
示例结果: