数组成员调用你会吗?
比如数组:$arr=['apple','b'=>'banana'];
你一定会,就是用下标$arr[0],或者键名嘛$arr['b']。
调用键名这种情况在PHP里非常普遍,像是从数据库直接取来的成员都是数组加字段名。
但是你从来没觉得自己的代码有些怪怪的?
奇怪而正常的代码
现在我要循环一个数组,还要用它里边的成员,但是数组本身就是一个单词(为了让代码易懂)。
这个长单词再加上比较长的键名,感觉似乎乱乱滴啊!
比如我随便写点儿代码,这是我们可能经常遇到的:
//我只是简单地用if判断两个值相加是否大于总分,可是数组名加键名看起来超蛋痛有没有
//……好凌乱,猛一看还以为我写了个操作系统
if( $students['score'] + $students['last_score'] > $students['total_score']){
return;
}
如何让代码快乐?唯有extract
以上情况,你只需要提前作一个这样的操作:extract($students)
于是代码就清爽了一个数量级:
extract($students)
if( $score + $last_score > $total_score ){
return;
}
所以,extract()的作用呢,就是将关联数组中的键名当作变量名,把数组成员抽出来啦。
而我要给出的结论就是,操作关联数组,一定要有使用extract的意识!
抽出来是全局变量?
注意!抽出的数组会覆盖同名变量,但覆盖的目标抽出的位置有关,比如在函数中使用,就只是覆盖临时的局部变量。
怎么说呢,应当主要在函数中使用。
WHAT? 我不想覆盖已有变量!
可以我的王,你只需要再加一个参数EXTR_SKIP,上边的例子里会是这么写:
extract($students, EXTR_SKIP);
另外再告诉你一个小密秘我们还能用它生成统一前缀的变量,只要这样写:
extract($students, EXTR_PREFIX_ALL,'我是前缀');
//得到:$我是前缀score, $我是前缀$last_score, $我是前缀total_score
比如数组:$arr=['apple','b'=>'banana'];
你一定会,就是用下标$arr[0],或者键名嘛$arr['b']。
调用键名这种情况在PHP里非常普遍,像是从数据库直接取来的成员都是数组加字段名。
但是你从来没觉得自己的代码有些怪怪的?
奇怪而正常的代码
现在我要循环一个数组,还要用它里边的成员,但是数组本身就是一个单词(为了让代码易懂)。
这个长单词再加上比较长的键名,感觉似乎乱乱滴啊!
比如我随便写点儿代码,这是我们可能经常遇到的:
//我只是简单地用if判断两个值相加是否大于总分,可是数组名加键名看起来超蛋痛有没有
//……好凌乱,猛一看还以为我写了个操作系统
if( $students['score'] + $students['last_score'] > $students['total_score']){
return;
}
如何让代码快乐?唯有extract
以上情况,你只需要提前作一个这样的操作:extract($students)
于是代码就清爽了一个数量级:
extract($students)
if( $score + $last_score > $total_score ){
return;
}
所以,extract()的作用呢,就是将关联数组中的键名当作变量名,把数组成员抽出来啦。
而我要给出的结论就是,操作关联数组,一定要有使用extract的意识!
抽出来是全局变量?
注意!抽出的数组会覆盖同名变量,但覆盖的目标抽出的位置有关,比如在函数中使用,就只是覆盖临时的局部变量。
怎么说呢,应当主要在函数中使用。
WHAT? 我不想覆盖已有变量!
可以我的王,你只需要再加一个参数EXTR_SKIP,上边的例子里会是这么写:
extract($students, EXTR_SKIP);
另外再告诉你一个小密秘我们还能用它生成统一前缀的变量,只要这样写:
extract($students, EXTR_PREFIX_ALL,'我是前缀');
//得到:$我是前缀score, $我是前缀$last_score, $我是前缀total_score
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/9268/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表