标题:一个小习惯让你的代码更完美 PHP中抽出数组成员 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Sat, 24 Jun 2017 12:59:44 +0000 作者:jackxiang 地址:http://jackxiang.com/post/9268/ 内容: 数组成员调用你会吗? 比如数组:$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 Generated by Jackxiang's Bo-blog 2.1.1 Release