多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 主要特点 PHP 常用函数总结 ## 二、php中对象转数组有哪些方法 ### 1、用(array)方式递归转化(实质是解决对象里还有对象的问题 //PHP stdClass Object转array function object_array($array) { if(is_object($array)) { $array = (array)$array; } if(is_array($array)) { foreach($array as $key=>$value) { $array[$key] = object_array($value); } } return $array; } 结果是对的,但是对象的属性如果是protected的话,转换成数组的键的时候属性名前会加上\*字符 array(9) { ["*questions"] => array(21) { [0] => array(13) { ["bq_id"] => int(28) ["bq_b_id"] => int(5) 这个\*是因为我的属性是protected的,如果属性换成public,就没有了 ### 2、转$xmlString的 ~~~ $array = json_decode(json_encode(simplexml_load_string($xmlString)),TRUE); ~~~ ### 3、json\_decode(json\_encode($array),true)方式 这个你对象首先能被json\_encode才行 ~~~ 4.如果是10W的数据量的话,执行要进1s,结构再复杂些,可以达到3s,性能太差了,可以用以下替换: function object2array(&$object) { $object = json_decode( json_encode( $object),true); return $object; } ~~~ ### 4、$arr = (array)$obj方式转化的效果 如果对象里面没有对象,这个方法是对的 对象里面还有对象,就得用第一种递归的方式将所有的对象都转换成数组 # 判断是否传入必要参数 ~~~ /** * 判断是否传入必要参数 * @param [type] $inter_param [description] * @param [type] $agency [description] * @param [type] $merchant [description] * @return [type] [description] */ function judge_parameter($param){ if(!isset($param['inter_param']) || !isset($param['agency']) || !isset($param['merchant'])){ return false; } if(empty($param['inter_param']) || empty($param['agency']) || empty($param['merchant'])){ return false; } return true; } ~~~ # 判断数组类型参数是否含有空元素值 ~~~ //$param array function is_arraynull($param){ if(!is_array($param)){ return '0'; }else{ foreach ($param as $key => $value) { if($value!=''){ $ret = is_arraynull($value); }else{ return 1; } } } } ~~~ # 接收异步过来的get消息 ~~~ $sms_result_data = $_GET; //用这种 $param = request()->param(); //thinkphp5接收消息 $sms_result_data1 = file_get_contents("php://input"); ~~~ # 判断路径是文件还是目录 ~~~ function f_type($f_path){ return is_dir($f_path)?'dir':suffixtype($f_path); } ~~~ * * * # 计算文件或目录字节大小 ~~~ //计算文件或目录字节大小 function bytesize_calc($f_path){ if(!is_dir($f_path)){ return sprintf("%u", filesize($f_path));} $bytesize = 0; $f_arr = scandir($f_path); $size = count($f_arr); for($i=0;$i<$size;$i++){ if('.'==$f_arr[$i]||'..'==$f_arr[$i])continue; $file_or_dir = $f_path.'/'.$f_arr[$i]; $bytesize += bytesize_calc($file_or_dir); } return $bytesize; } //获得文件大小 function f_size($f_path){ return size_formate(bytesize_calc($f_path)); } ~~~ # 获取文件后缀名,并判断是否在定义的数组中 ~~~ /** * 获取文件后缀名,并判断是否合法 * * @param string $file_name //是一个文件的路径 * @param array $allow_type //需要的文件类型数组 * @return blob */ function get_file_suffix($file_name, $allow_type = array()) { $file_suffix = strtolower(array_pop(explode('.', $file_name))); if (empty($allow_type)) { return $file_suffix; } else { if (in_array($file_suffix, $allow_type)) { return true; } else { return false; } } } ~~~ # 默认获得文件修改时间 ~~~ function filetime($way,$char='m'){ date_default_timezone_set('PRC'); switch($char){ case 'c':$localtime = date('Y-m-d H:i:s',filectime($way)); break; case 'm':$localtime = date('Y-m-d H:i:s',filemtime($way)); break; case 'a':$localtime = date('Y-m-d H:i:s',fileatime($way)); break; } return $localtime; } ~~~ # 检查目标文件夹是否存在,如果不存在则自动创建该目录 ~~~ /** * 检查目标文件夹是否存在,如果不存在则自动创建该目录 * * @access public * @param string folder 目录路径。不能使用相对于网站根目录的URL * * @return bool */ function make_dir($folder) { $reval = false; if (!file_exists($folder)) { /* 如果目录不存在则尝试创建该目录 */ @umask(0); /* 将目录路径拆分成数组 */ preg_match_all('/([^\/]*)\/?/i', $folder, $atmp); /* 如果第一个字符为/则当作物理路径处理 */ $base = ($atmp[0][0] == '/') ? '/' : ''; /* 遍历包含路径信息的数组 */ foreach ($atmp[1] AS $val) { if ('' != $val) { $base .= $val; if ('..' == $val || '.' == $val) { /* 如果目录为.或者..则直接补/继续下一个循环 */ $base .= '/'; continue; } } else { continue; } $base .= '/'; if (!file_exists($base)) { /* 尝试创建目录,如果创建失败则继续循环 */ if (@mkdir(rtrim($base, '/'), 0777)) { @chmod($base, 0777); $reval = true; } } } } else { /* 路径已经存在。返回该路径是不是一个目录 */ $reval = is_dir($folder); } clearstatcache(); return $reval; } ~~~ # 获取随机字符串 ~~~ /** * 随机字符 * @param int $length 长度 * @param string $type 类型 * @param int $convert 转换大小写 1大写 0小写 * @return string */ function random($length=10, $type='letter', $convert=0) { $config = array( 'number'=>'1234567890', 'letter'=>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 'string'=>'abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789', 'all'=>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' ); if(!isset($config[$type])) $type = 'letter'; $string = $config[$type]; $code = ''; $strlen = strlen($string) -1; for($i = 0; $i < $length; $i++){ $code .= $string{mt_rand(0, $strlen)}; } if(!empty($convert)){ $code = ($convert > 0)? strtoupper($code) : strtolower($code); } return $code; } ~~~ # 获取当前文件所在的文件路径 ~~~ define('CUR_API_PATH', rtrim(str_replace('\\', '/', dirname(__FILE__)),'/').'/'); ~~~ # PHP限制IP访问 只允许指定IP访问 允许\*号通配符过滤IP ~~~ /** * 检测访问的ip是否为规定的允许的ip * Enter description here ... */ function check_ip(){ $ALLOWED_IP=array('192.168.2.*','127.0.0.1','192.168.2.49'); $IP=getIP(); $check_ip_arr= explode('.',$IP);//要检测的ip拆分成数组 #限制IP if(!in_array($IP,$ALLOWED_IP)) { foreach ($ALLOWED_IP as $val){ if(strpos($val,'*')!==false){//发现有*号替代符 $arr=array();// $arr=explode('.', $val); $bl=true;//用于记录循环检测中是否有匹配成功的 for($i=0;$i<4;$i++){ if($arr[$i]!='*'){//不等于* 就要进来检测,如果为*符号替代符就不检查 if($arr[$i]!=$check_ip_arr[$i]){ $bl=false; break;//终止检查本个ip 继续检查下一个ip } } }//end for if($bl){//如果是true则找到有一个匹配成功的就返回 return; die; } } }//end foreach header('HTTP/1.1 403 Forbidden'); echo "Access forbidden"; die; } } ~~~ # api返回信息 ~~~ /** * 数据返回 * @param [int] $code [结果码 200:正常/4**数据问题/5**服务器问题] * @param [string] $msg [返回的提示信息] * @param [array] $data [返回的数据] * @return [string] [最终的json数据] */ public function return_msg($code, $msg = '', $data = []) { /*********** 组合数据 ***********/ $return_data['code'] = $code; $return_data['msg'] = $msg; $return_data['data'] = $data; /*********** 返回信息并终止脚本 ***********/ echo json_encode($return_data,JSON_UNESCAPED_UNICODE); die; } ~~~ # php常用自定义函数类下载 [https://pan.baidu.com/s/18ZuQm5cx3ynQtQqcQgK0Vw](https://pan.baidu.com/s/18ZuQm5cx3ynQtQqcQgK0Vw) * * * # php 设置字符编码为utf-8 `header("Content-Type: text/html;charset=utf-8");` * * * # GB2312和utf8相互转换 ~~~ echo iconv('GB2312', 'UTF-8//IGNORE', $str); //将字符串的编码从GB2312转到UTF-8 //ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符串都无法被保存。 iconv("UTF-8","GB2312//IGNORE",$data); print_r(iconv_get_encoding()); //得到当前页面编码信息 // 转码 function gbk($str){return iconv('utf-8','gbk',$str);} function utf8($str){return iconv('gbk','utf-8',$str);} ~~~ # 路径格式化(替换双斜线为单斜线) ~~~ function path_formate($str){ return str_replace('\\\\','\\',$str); } ~~~ * * * # 获取当前文件的目录 ~~~ 方法一: define('BASE_PATH',rtrim(str_replace('\\','/',__DIR__).'/')); 方法二: define('BASE_DIR', rtrim(str_replace('\\', '/', dirname(__FILE__)),'/').'/'); ~~~ * * * # 打印输出 ~~~ function dump($var) { echo '<pre>'; print_r($var); echo '</pre>'; } function vp($var) { echo '<pre>'; var_dump($var); echo '</pre>'; } function dd($var) { echo '<pre>'; var_dump($var); echo '</pre>'; die; } ~~~