霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

PHP编写程序的十个经验技巧(三)

五、丰富的数组函数

PHP与组数有关的函数功能非常强大,其中一些常见的函数可以判断一个数组中是否包含某个元素,对一个数组中的元素进行计数,添加或删除数组中的元素或者对数组中的元素进行排序。

如果有一个很大的数组,而你需要找出其中是否包含一个特定的元素,就可以使用in_array()。

下面的例子将显示“Not found in this array”,因为在一个名字为$namesArray的数组中查找Apple,而在$namesArray数组中不存在这样一个元素。

$namesArray = array('Book', 'Pen', 'Tom','Mouse');

$lookingFor = "Apple";

if (in_array($lookingFor, $namesArray)) {

echo "Youve found it!";

} else {

echo "Not found in this array!";
}

如果把$lookingFor的值改为Tom,就会得到“Youve found it!”的信息,因为Tom是$namesArray数组中的一个元素。

如果要对一个数组中的元素个数进行计数,只要简单地使用count()函数即可:

$count = count($namesArray);

返回的$count的值为4。

可以在一个数组的开头或结尾处添加元素,还可以使用array_merge()来建立一个包含二个或更多数组中元素的新数组,合并时,元素的顺序会按指定的顺序排列,如果原来的数组是被排过序的,在合并后需要对它重新排序。

我们可以首先利用array_push()在数组的结尾处添加一个元素:

$fruitArray = array('Apple', 'orange', 'banana', 'kiwi', 'pear');

/* 向数组中添加元素 */

array_push($fruitArray, 'grape', 'pineapple', 'tomato');

/*显示每个元素及其序号*/

while (list($key,$value) = each($fruitArray)) {

echo $key : $value;

}

如果需要在数组的开头添加元素,其代码与上面的代码差不多,唯一的不同之处是需要用array_unshift()代替array_push()。

/* 建立一个数组*/

$fruitArray = array('apple', 'orange', 'banana', 'kiwi', 'pear');

/* 向数组中添加元素*/

array_unshift($fruitArray, 'grape', 'pineapple', 'tomato');

/* 显示每个元素及其序号*/

while (list($key,$value) = each($fruitArray)) {

echo $key : $value;

}

array_merge()函数可以把二个或更多的数组合并为一个数组。

$fruitArray = array('apple', 'orange', 'banana', 'kiwi', 'pear');

/*/建立第二个数组*/

$vegArray = array('carrot', 'green beans', 'ASParagus', 'artichoke', 'corn');

/*把这二个数组合并为一个数组*/

$goodfoodArray = array_merge($fruitArray, $vegArray);

/* 显示每个元素及其序号*/

while (list($key,$value) = each($goodfoodArray)) {

echo $key : $value;

}

现在我们已经掌握了如何添加元素和合并数组,我们再来看看如何从一个数组中删除元素。从一个数组的末尾删除一个元素可以使用array_pop()函数,使用array_shift()函数可以从一个数组的开头删除一个元素。尽管使用array_pop()或 array_shift()从数组中删除了一个元素,你还可以把这个元素当作一个变量来使用。

使用array_pop()从一个数组的末尾删除一个元素:

/*建立一个数组*/

$fruitArray = array('apple', 'orange', 'banana', 'kiwi', 'pear');

/* 从数组的末尾删除一个元素*/

$popped = array_pop($fruitArray);

/* 显示删除后数组的内容和你删除的元素*/

while (list($key,$value) = each($fruitArray)) {

echo $key : $value;

}

echo 'and finally, in $popped:'. $popped;

运行上面的脚本会得到下面的结果:

0 : apple

1 : orange

2 : banana

3 : kiwi

and finally, in $popped: pear

我们再来讨论一个从一个数组的末尾删除元素的例子:

/* 建立一个数组*/

$fruitArray = array('apple', 'orange', 'banana', 'kiwi', 'pear');

/*从一个数组的开始删除一个元素*/

$shifted = array_shift($fruitArray);

/* 显示删除后数组的内容和你删除的元素*/

while (list($key,$value) = each($fruitArray)) {

echo $key : $value;

}

echo 'and finally, in $shifted:'. $shifted;

运行上述脚本会得到如下的显示结果:

0 : orange

1 : banana

2 : kiwi

3 : pear

and finally, in $shifted: apple

另外还有几个函数可以对数组中的元素进行排序,但在这里我就不再做介绍。

六、动态图像的创建

只要安装一些第三方的库文件并具有一定的几何知识,就可以利用PHP来创建和处理图像了。

在使用基本的图像创建函数之前,需要安装GD库文件。

创建一幅简单的图像也需要用到许多的函数,我们将一步一步地进行说明。

在这个例子中,我将创建一个PNG格式的图像文件,下面的代码是一个包含所创建的图像的MIME类型的头部:

使用ImageCreate()创建一个代表空白图像的变量,这个函数要求以像素为单位的图像大小的参数,其格式是ImageCreate(x_size, y_size)。如果要创建一个大小为250X250的图像,就可以使用下面的语句:

$newImg = ImageCreate(250,250);

由于图像还是空白的,因此你可能会希望用一些彩色来填充它。然而,你需要首先使用ImageColorAllocate()函数用其RGB值为这种颜色指定一个名字,这一函数的格式为ImageColorAllocate([image], [red], [green], [blue])。如果要定义天蓝色,可以使用如下的语句:

$skyblue = ImageColorAllocate($newImg,136,193,255);

接下来,需要使用ImageFill()函数用这种颜色填充这个图像,ImageFill()函数有几个版本,例如ImageFillRectangle()、ImageFillPolygon()等。为简单起见,我们通过如下的格式使用ImageFill()函数:

ImageFill([image], [start x point], [start y point], [color])

ImageFill($newImg,0,0,$skyblue);

最后,建立图像后释放图像句柄和所占用的内存:

ImagePNG($newImg);

ImageDestroy($newImg);

这样,创建图像的全部代码如下所示:

$newImg = ImageCreate(250,250);

$skyblue = ImageColorAllocate($newImg,136,193,255);

ImageFill($newImg,0,0,$skyblue);

ImagePNG($newImg);

ImageDestroy($newImg);

如果把这个脚本文件保存为skyblue.php,并用浏览器访问它,就会看到一个天蓝色的250X250的PNG格式的图像。

我们还可以使用图像创建函数对图像进行处理,例如把一个较大图像作成一个小图像:

假设你有一幅图像,想从中裁剪出一个35X35大小的图像。你所需要作的是创建一个35X35大小的空白图像,创建一个包含原来图像的图像流,然后把一个经过调整大小的原来的图像放到新的空白图像中。

要完成这一任务的关健函数是ImageCopyResized(),它要求的格式如下所示:

ImageCopyResized([new image handle],[original image handle],[new image X], [new Image Y], [original image X], [original image Y], [new image X], [new image Y], [original image X], [original image Y])

header(Content-type: image/png);

/* 建立保存新图像高度和宽度的变量*/

$newWidth = 35;

$newHeight = 35;

/* 建立给定高度和宽度的新的空白图像*/

$newImg = ImageCreate($newWidth,$newHeight);

/* 从原来较大的图像中得到数据*/

$origImg = ImageCreateFromPNG('test.png');

/*拷贝调整大小后的图像,使用ImageSX()、ImageSY()得到原来的图像在X、Y方面上的大小 */

ImageCopyResized($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg));

/*创建希望得到的图像,释放内存 */

ImagePNG($newImg);

ImageDestroy($newImg);

如果把这一小段脚本保存为resize.php,然后用浏览器对它进行访问,就会看到一个35X35大小的PNG格式的图形。