保定网站建设,网站推广,网站优化服务,保定专业的PHP网站制作机构!

使用PHP Array数组函数时谨防由键名引发程序出错

发表于:2008年11月26日 18时  作者:dx_andy

PHP的Array数组函数库实用且强大,但使用时假如您的程序对数组键名有格外要求的时候需要谨慎一些。看下面的情况:

假如我现在要将一个数组HTML化为一个下拉表单,并且数组的键值为下拉表单项的Value值。

PHP代码

$select = array(
1 => ‘我是通过搜索引荐来到本站的’,
3 => ‘我是通过phplamp.org来到本站的’,
5 => ‘哈哈,我记住了本站的域名’,
‘unknow’ => ‘唉,我也不知道我是怎么过来的’,
);
echo “<select name=’HowFrom’>”;
foreach ($select as $key => $sel) {
echo “<option value=’{$key}’>{$sel}</option>”;
}
echo “</select>”;

当提交表单我们即可以接收到它的键值,然后通过键值与$select数组比对即可得到数据的详细含义。

假如现在我的需要动态的去改变这个数组,比方说我们要通过获取0值来判断用户是否在提交表单前已经选择了某个合法的选项(非0)。现在就需要在$select数组前加一个值。这时会很自然的想到PHP的array_unshift函数。

于是我们未加测试的加在了上面第6行代码的后面。

PHP代码

array_unshift($select, ‘您还没有选择’);

打开浏览器测试一下,效果与刚才差不多,只是多了个“您还没有选择”。感觉这样的OK了,于是进行下面的部分。其实BUG往往就隐藏在这种不经意之间。

认真看一下PHP函数手册(array_unshift)会发现使用时有一个注意事项:单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

然后把使用了array_unshift后的$select数组打印出来,却发现键值已经混乱,已经无法通过原$select数组获取原数据了:

靠,真的变了

Array
(
[0] => 您还没有选择
[1] => 我是通过搜索引荐来到本站的
[2] => 我是通过phplamp.org来到本站的
[3] => 哈哈,我记住了本站的域名
[unknow] => 唉,我也不知道我是怎么过来的
)

认真翻一下手册发现有几数组函数都有这个注意事项,比如:array_merge(),array_shift()…所以使用PHP数组函数时一定要注意到这一点,特此记录,提醒本人与阅读此文者…

 订阅“PHPLAMP博客”方便及时获取网站内容

PHPLAMP博客是专注于网站建设,搜索引擎研究,网站推广,网站优化的IT博客。

有关, 的相关文章:

发表一下您对本文的意见