PHP的Array数组函数库实用且强大,但使用时假如您的程序对数组键名有格外要求的时候需要谨慎一些。看下面的情况:
假如我现在要将一个数组HTML化为一个下拉表单,并且数组的键值为下拉表单项的Value值。
$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行代码的后面。
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博客是专注于网站建设,搜索引擎研究,网站推广,网站优化的IT博客。