php中数组的索引通常叫作key, 在C语言中称为下标. 例如: $array['test'] = 1000; 这个test就是key值, 1000就是属性值, 也是赋值. 通常我们在使用时多数以val值为标准, 比如 if($array['test'] == 1000) 判断应用. echo "test : {$array['test']}"; 打印应用, foreach($array as $val) 循环应用. 基本上我们会淡忘了key值. 为什么称为淡忘, 最明显的就是从url上的get可以明显看得出来.以下为举例.
一个新需求, 程序跟据某个用户的金钱来发送优惠码. 绝大多数开发者会如此组合:
index.php?user=jack&pay=1000;
很明显, get数组创建了两个下标, 分配了相应的内存空间. 而没有去思考, 其实jack就是下标.比如
index.php?jack=1000;
这样有什么问题呢? 很多人会震惊了, 这不对呀, 我怎么取得到jack? 这是针对下标做了优化的后果, 使得url更精简, 理解上更人性化, jack有1000元. 那么我们怎么能够获取jack的随机值呢, 因为很可能会是andy=500, peter=300这样的.
其实我们已经要开始放弃传统的key/val对应的思维方式. 以key为索引去找数据已经不能满足目前的需求. 我们得以位组计算来理解.
index.php?user=jack&pay=1000;
第1组: user.
第2组: jack.
第3组: pay.
第4组: 1000.
利用array_value()及array_key()函数我们需要将get整理成如下格式:
array(
1=>'jack',
2=>'1000',
)
在使用中, 我就直接看位数来使用, 比如取用户名就是 $get[1]; 取金钱就是$get[1]; 特别在单一入口及插件入口上, 对key值进行有效利用是作用非常大的. 比如通常我们引入某个应用文件,如下url.
index.php?d=temp&f=main
很明显的是调用temp目录中的main.inc.php文件, 那要是换成新鲜的写法呢?
index.php?temp=main
更简洁, 更扩展性, key与val值都可以变更.
我们再深入将应用扩展化, 思考一下传统的url伪静态. 比如
index/user/jack/pay/1000.html
这是框架及多数伪静态都会采用的模式, 在这模式上, 你就能够完全理解到key已经不再重要, 已经混淆在一起. 我们伪静态写法: ^index(.*)$ index.php?g=$1 [L] 映射到php=$1上, 那么经过php处理也可以产生出新数组:
array(
1=>'user',
2=>'jack',
3=>'pay',
4=>'1000',
)
这样一来, 无论你增加任意的参数及值, 都可以伪静态起来, 比如 index/a.html , index/page/9.html
更为重要的是, 即使你如此做, 旧有的key理解仍然有效, 你仍然可以通过$_GET['jack'] 来取得属性1000的值, 你可以改变自己的思维来适应这种转变, 同时又可以参齐着一些旧有的使用习惯. 这不仅仅是缩短了url, 更重要的是思维转变.
end