## 主要特点
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;
}
~~~