PHP中extract() array_map call_user_func compact

简介:

近日在看一个牛人的代码时,看到一个非常好用的函数:extract(),它的主要作用是将数组展开,键名作为变量名,元素值为变量值,可以说为数组的操作 提供了另外一个方便的工具,比方说,可以很方便的提取$_POST或者$_GET的元素,对表单提交上来的内容不能不用一一赋值,直接使用下面代码:

edit.html

Java代码   收藏代码
  1. <form method="post" name="myform" id="myform">  
  2.     <table cellpadding="2" cellspacing="1" class="table_form" width="100%">  
  3.         <tr>  
  4.             <th width="100"><?php echo L('serviceurl') ?>:</th>  
  5.             <td><input type="text" name="openservice[serviceurl]" value="<?php echo $serviceurl; ?>"></td>  
  6.         </tr>  
  7.   
  8.         <tr>  
  9.             <th width="100"><?php echo L('servicename') ?>:</th>  
  10.             <td><input type="text" name="openservice[servicename]" value="<?php echo $servicename; ?>"></td>  
  11.         </tr>  
  12.         <input type="submit" name="dosubmit" id="dosubmit" value=" <?php echo L('submit') ?> ">  
  13.     </table>  
  14. </form>   

在action.php中只要使用extract()函数将$_POST['openservice']全局数据解开:

action.php

Java代码   收藏代码
  1. <?php  
  2. //保存时,需要的内容用$_POST['openservice'],不需要保存的用$_POST['info']  
  3. $_POST['openservice'] = array_map('trim', $_POST['openservice']);  
  4. $this->db->insert($_POST['openservice']);  
  5.   
  6. //回显修改  
  7. extract($_POST['openservice']);  
  8. //相当于$username = $_POST['openservice']['username'];  
  9. //$password = $_POST['openservice']['password'];  
  10. ?>  

 数据库查询代理

Java代码   收藏代码
  1. <?php  
  2. class Brand   
  3. {  
  4.     public function insert($data){  
  5.     }  
  6.   
  7.     public static function update($data, $where = ""){  
  8.     }  
  9.   
  10.     public function delete($id){  
  11.     }  
  12.   
  13. //重写机器人:Brand::robot(array('method'=>'save','params'=>array('data'=>'someData')) );  
  14.     public static function robot(array $settings)  
  15.     {  
  16.         $data = array();  
  17.         $obj = new self();  
  18.         extract($settings['params']);  
  19.         switch ($settings['method']) {  
  20.             case 'save':  
  21.                 $data = $obj->insert($data);  
  22.                 break;  
  23.   
  24.             case 'update':  
  25.                 $data = $obj->update($data, $where);  
  26.                 break;  
  27.             default:  
  28.                 break;  
  29.         }  
  30.         return $data;  
  31.     }  

 以上代码用系统自带方法也可以实现

Java代码   收藏代码
  1. //use for static method  
  2. call_user_func_array(array("Brand""update"), array($data, $where));   
  3. call_user_func(array("Brand""update"), $data, $where);  
  4. // or    
  5. $obj = new Brand;  
  6. call_user_func(array($obj, "update"), $data, $where)  

compact是extract的反向的

Java代码   收藏代码
  1. <?php  
  2. $firstname = "Peter";  
  3. $lastname = "Griffin";  
  4. $age = "38";  
  5.   
  6. $result = compact("firstname""lastname""age");  
  7. print_r($result);  
  8. //Array  
  9. //(  
  10. //[firstname] => Peter  
  11. //[lastname] => Griffin  
  12. //[age] => 38  
  13. //)  
  14. ?>  
 
相关文章
|
5月前
|
JavaScript 前端开发 PHP
|
搜索推荐 算法 PHP
PHP 数组(Array) - 排序算法
PHP 数组(Array) - 排序算法
56 0
|
PHP 索引
PHP 数组(Array)
PHP 数组(Array)
76 0
|
PHP
php函数基础学习:array_chunk() 函数把一个数组分割为新的数组块
php函数基础学习:array_chunk() 函数把一个数组分割为新的数组块
66 0
|
JSON PHP 数据库
PHP:Laravel cast array json数据存数据库时unicode 编码问题和update更新不触发数据转换
PHP:Laravel cast array json数据存数据库时unicode 编码问题和update更新不触发数据转换
179 0
|
存储 JSON 安全
为什么我觉得GoFrame的garray比PHP的array还好用?
写过PHP的同学都知道 PHP的数组Array非常好用,特别灵活。我在写PHP之前使用Java做安卓开发,在接触PHP的数组Array之后,直呼太香了!
102 0
为什么我觉得GoFrame的garray比PHP的array还好用?
PHP 简单 对象 (object) 与 数组 (array) 的转换
PHP 简单 对象 (object) 与 数组 (array) 的转换
|
PHP
【PHP】利用array_slice对数组进行分页
【PHP】利用array_slice对数组进行分页
200 0
【PHP】利用array_slice对数组进行分页
|
PHP
【PHP】Cannot use object of type stdClass as array
【PHP】Cannot use object of type stdClass as array
767 0
【PHP】Cannot use object of type stdClass as array