PHP 对象、数组、字符串、转义等

1、将数组转换为对象

/**
 * 将数组转换为对象
 * @param  array  $data  数组
 * @return 返回对象(object)
 */
function array2object($array) {
    if (is_array($array)) {
        $obj = new StdClass();
        foreach ($array as $key => $val){
            $obj->$key = $val;
        }
    }
    else { $obj = $array; }
    return $obj;
}

2、将对象转换为数组

/**
 * 将对象转换为数组
 * @param  object $data  对象
 * @return array  返回数组格式,如果,data为空,则返回空数组
 */
function object2array($object) {
    if (is_object($object)) {
        foreach ($object as $key => $value) {
            $array[$key] = $value;
        }
    }
    else {
        $array = $object;
    }
    return $array;
}

3、将字符串转换为数组

/**
 * 将字符串转换为数组
 * @param  string $data  字符串
 * @return array  返回数组格式,如果,data为空,则返回空数组
 */
function string2array($data) {
    $data = trim($data);
    if($data == '') return array();
    if(strpos($data, 'array')===0){
        @eval("$array = $data;");
    }else{
        if(strpos($data, '{\\')===0) $data = stripslashes($data);
        $array=json_decode($data,true);
        if(strtolower(CHARSET)=='gbk'){
            $array = mult_iconv("UTF-8", "GBK//IGNORE", $array);
        }
    }
    return $array;
}

4、将数组转换为字符串

**
 * 将数组转换为字符串
 *
 * @param  array  $data     数组
 * @param  bool   $isformdata    如果为0,则不使用new_stripslashes处理,可选参数,默认为1
 * @return string 返回字符串,如果,data为空,则返回空
 */
function array2string($data, $isformdata = 1) {
    if($data == '' || empty($data)) return '';
    
    if($isformdata) $data = new_stripslashes($data);
    if(strtolower(CHARSET)=='gbk'){
        $data = mult_iconv("GBK", "UTF-8", $data);
    }
    if (version_compare(PHP_VERSION,'5.3.0','<')){
        return addslashes(json_encode($data));
    }else{
        return addslashes(json_encode($data,JSON_FORCE_OBJECT));
    }
}

5、将文本格式成适合js输出的字符串

/**
 * 将文本格式成适合js输出的字符串
 * @param string $string 需要处理的字符串
 * @param intval $isjs 是否执行字符串格式化,默认为执行
 * @return string 处理后的字符串
 */
function format_js($string, $isjs = 1) {
    $string = addslashes(str_replace(array("\r", "\n", "\t"), array('', '', ''), $string));
    return $isjs ? 'document.write("'.$string.'");' : $string;
}

6、返回经addslashes(转义)处理过的字符串或数组

/**
 * 返回经addslashes(转义)处理过的字符串或数组
 * @param $string 需要处理的字符串或数组
 * @return mixed
 */
function new_addslashes($string){
   if(!is_array($string)) return addslashes($string);
   foreach($string as $key => $val) $string[$key] = new_addslashes($val);
   return $string;
}

7、返回经stripslashes(删除反斜杠)处理过的字符串或数组

/**
 * 返回经stripslashes(删除反斜杠)处理过的字符串或数组
 * @param $string 需要处理的字符串或数组
 * @return mixed
 */
function new_stripslashes($string) {
   if(!is_array($string)) return stripslashes($string);
   foreach($string as $key => $val) $string[$key] = new_stripslashes($val);
   return $string;
}

8、返回经htmlspecialchars(字符转html)处理过的字符串或数组

/**
 * 返回经htmlspecialchars(字符转html)处理过的字符串或数组
 * @param $obj 需要处理的字符串或数组
 * @return mixed
 */
function new_html_special_chars($string) {
   $encoding = 'utf-8';
   if(strtolower(CHARSET)=='gbk') $encoding = 'ISO-8859-15';
   if(!is_array($string)) return htmlspecialchars($string,ENT_QUOTES,$encoding);
   foreach($string as $key => $val) $string[$key] = new_html_special_chars($val);
   return $string;
}

function new_html_entity_decode($string) {
   $encoding = 'utf-8';
   if(strtolower(CHARSET)=='gbk') $encoding = 'ISO-8859-15';
   return html_entity_decode($string,ENT_QUOTES,$encoding);
}

function new_htmlentities($string) {
   $encoding = 'utf-8';
   if(strtolower(CHARSET)=='gbk') $encoding = 'ISO-8859-15';
   return htmlentities($string,ENT_QUOTES,$encoding);
}

9、安全过滤函数

/**
 * 安全过滤函数
 *
 * @param $string
 * @return string
 */
function safe_replace($string) {
   $string = str_replace('%20','',$string);
   $string = str_replace('%27','',$string);
   $string = str_replace('%2527','',$string);
   $string = str_replace('*','',$string);
   $string = str_replace('"','"',$string);
   $string = str_replace("'",'',$string);
   $string = str_replace('"','',$string);
   $string = str_replace(';','',$string);
   $string = str_replace('<','<',$string);
   $string = str_replace('>','>',$string);
   $string = str_replace("{",'',$string);
   $string = str_replace('}','',$string);
   $string = str_replace('\\','',$string);
   return $string;
}

10、xss过滤函数

11、过滤ASCII码从0-28的控制字符

/**
 * 过滤ASCII码从0-28的控制字符
 * @return String
 */
function trim_unsafe_control_chars($str) {
   $rule = '/[' . chr ( 1 ) . '-' . chr ( 8 ) . chr ( 11 ) . '-' . chr ( 12 ) . chr ( 14 ) . '-' . chr ( 31 ) . ']*/';
   return str_replace ( chr ( 0 ), '', preg_replace ( $rule, '', $str ) );
}

12、格式化文本域内容

/**
 * 格式化文本域内容
 *
 * @param $string 文本域内容
 * @return string
 */
function trim_textarea($string) {
   $string = nl2br ( str_replace ( ' ', ' ', $string ) );
   return $string;
}

13、将文本格式成适合js输出的字符串

/**
 * 将文本格式成适合js输出的字符串
 * @param string $string 需要处理的字符串
 * @param intval $isjs 是否执行字符串格式化,默认为执行
 * @return string 处理后的字符串
 */
function format_js($string, $isjs = 1) {
    $string = addslashes(str_replace(array("\r", "\n", "\t"), array('', '', ''), $string));
    return $isjs ? 'document.write("'.$string.'");' : $string;
}

14、转义 javascript 代码标记

/**
 * 转义 javascript 代码标记
 *
 * @param $str
 * @return mixed
 */
 function trim_script($str) {
   if(is_array($str)){
      foreach ($str as $key => $val){
         $str[$key] = trim_script($val);
      }
   }else{
      $str = preg_replace ( '/\<([\/]?)script([^\>]*?)\>/si', '<\script\>', $str );
      $str = preg_replace ( '/\<([\/]?)iframe([^\>]*?)\>/si', '<\iframe\>', $str );
      $str = preg_replace ( '/\<([\/]?)frame([^\>]*?)\>/si', '<\frame\>', $str );
      $str = str_replace ( 'javascript:', 'javascript:', $str );
   }
   return $str;
}

15、数组转码

/**
* 数组转码
*/
function mult_iconv($in_charset,$out_charset,$data){
    if(substr($out_charset,-8)=='//IGNORE'){
        $out_charset=substr($out_charset,0,-8);
    }
    if(is_array($data)){
        foreach($data as $key => $value){
            if(is_array($value)){
                $key=iconv($in_charset,$out_charset.'//IGNORE',$key);
                $rtn[$key]=mult_iconv($in_charset,$out_charset,$value);
            }elseif(is_string($key) || is_string($value)){
                if(is_string($key)){
                    $key=iconv($in_charset,$out_charset.'//IGNORE',$key);
                }
                if(is_string($value)){
                    $value=iconv($in_charset,$out_charset.'//IGNORE',$value);
                }
                $rtn[$key]=$value;
            }else{
                $rtn[$key]=$value;
            }
        }
    }elseif(is_string($data)){
        $rtn=iconv($in_charset,$out_charset.'//IGNORE',$data);
    }else{
        $rtn=$data;
    }
    return $rtn;
}

16、php用逗号格式化数字

<?php
/****
 * @author Amos Wang
 * @param $number
 * @return mixed
 */
function numberFormat($number)
{
    if(!is_numeric($number)){
        return $number;     //  只处理数字
    }
    list($integer,$decimal) = explode('.',$number);
    $number_temp = "";  //  临时计数
    $len = strlen($integer);
    $sublen = 3;    //  每隔几位数加逗号

    //处理整数部分
    $i=1;
   while(true){
       $pos = $i * $sublen;
       $join = empty($number_temp) ? "" : ","; // 连接符
       $number_temp = substr($integer,(0-$pos),$sublen).$join.$number_temp;

       if(($pos + $sublen) > $len){
           $number_temp = substr($integer,0,($len - $pos)).$join.$number_temp;
           break;
       }
       $i++;
   }
    //处理小数部分
    if(!empty($decimal)){
        $number_temp = !empty($number_temp) ? $number_temp.".".$decimal : "0.".$decimal;
    }
    return $number_temp;
}
$result = numberFormat(1234567.5564);
print_r($result);
?>

17、数组去重

/**
 * 数组去重
 */
function getArray($arr){
    $count = count($arr);
    $arrs = array();
    for ($i=0;$i<$count;$i++){
        $a = $arr[$i];
        unset($arr[$i]);
        if(!in_array($a,$arr)){
            $arrs[] = $a;
        }
    }
    return $arrs;
}

/**
 * 二维数组去重
 */
function assoc_unique($arr, $key) {
    $tmp_arr = array();
    foreach ($arr as $k => $v) {
        if (in_array($v[$key], $tmp_arr)) {
            unset($arr[$k]);
        } else {
            $tmp_arr[] = $v[$key];
        }
    }
    sort($arr);
    return $arr;
}

18、字符串去重

//字符串去重
function unique($str){
    //字符串中,需要去重的数据是以数字和“,”号连接的字符串,如$str,explode()是用逗号为分割,变成一个新的数组,见打印
    $arr = explode(',', $str);
    $arr = array_unique($arr);//内置数组去重算法
    $data = implode(',', $arr);
    $data = trim($data,',');//trim — 去除字符串首尾处的空白字符(或者其他字符),假如不使用,后面会多个逗号
    return $data;//返回值,返回到函数外部
}

19、数组排序

/**
 * 对查询结果集进行排序
 * @access public
 * @param array $list   查询结果
 * @param string $field 排序的字段名
 * @param array $sortby 排序类型
 * asc正向排序 desc逆向排序 nat自然排序
 * @return array
 */
function list_sort_by($list, $field, $sortby = 'asc')
{
    if (is_array($list)) {
        $refer = $resultSet = array();
        foreach ($list as $i => $data) {
            $refer[$i] = &$data[$field];
        }

        switch ($sortby) {
            case 'asc': // 正向排序
                asort($refer);
                break;
            case 'desc': // 逆向排序
                arsort($refer);
                break;
            case 'nat': // 自然排序
                natcasesort($refer);
                break;
        }
        foreach ($refer as $key => $val) {
            $resultSet[] = &$list[$key];
        }

        return $resultSet;
    }
    return false;
}
//数组排序
private function arrayOrder($array, $vkey)
{
    $newArr = array();
    foreach ($array as $key => $v) {
        $newArr[$key][$vkey] = $v[$vkey];
    }
    array_multisort($newArr, SORT_DESC, $array);//SORT_DESC为降序,SORT_ASC为升序

    return $array;
}
$data = [];
$order = array('dir' => SORT_DESC, 'mtime' => SORT_DESC);
multisort($data, $order);
/**
 * 对数组进行多键值排序
 * @param $array
 * @param $order
 */
public function multisort(&$array, $order)
{
    usort($array, function ($a, $b) use ($order) {
        $sortMap = array('asc' => SORT_ASC, 'desc' => SORT_DESC);
        $aObj    = (object)$a;
        $bObj    = (object)$b;
        if (is_string($order)) {
            $order = array($order);
        }
        if (is_object($order)) {
            $order = (array)$order;
        }
        $i      = 0;
        $cOrder = count($order);
        foreach ($order as $field => $dir) {
            if (is_numeric($field)) {
                $field = $dir;
                $dir   = SORT_ASC;
            }
            // Goto next step when a mis-match is found.
            if ($aObj->$field != $bObj->$field) {
                break;
            }
            // All fields match return 0
            if (++$i === $cOrder) {
                return 0;
            }
        }

        if ( ! is_numeric($dir)) {
            $dir = strtolower($dir);
            $dir = $sortMap[$dir];
        }

        $d = ($dir === SORT_DESC) ? -1 : 1;
        $c = ($aObj->$field < $bObj->$field) ? -1 : 1;

        return $c * $d;
    });
}

20、兼容低版本的array_column

array_column() 返回输入数组中某个单一列的值。

/**
 * 兼容低版本的array_column
 *
 * @param  $array      多维数组
 * @param  $column_key 需要返回值的列
 * @param  $index_key  可选。作为返回数组的索引/键的列。
 *
 * @return array       返回一个数组,数组的值为输入数组中某个单一列的值。
 */
function hui_array_column($array, $column_key, $index_key = null)
{
    if (function_exists('array_column')) {
        return array_column($array, $column_key, $index_key);
    }

    $result = array();
    foreach ($array as $key => $value) {
        if ( ! is_array($value)) {
            continue;
        }
        if ($column_key) {
            if ( ! isset($value[$column_key])) {
                continue;
            }
            $tmp = $value[$column_key];
        } else {
            $tmp = $value;
        }
        if ($index_key) {
            $key = isset($value[$index_key]) ? $value[$index_key] : $key;
        }
        $result[$key] = $tmp;
    }

    return $result;
}

21、把返回的数据集转换成Tree

22、判断字符串是否为已经序列化过

/**
 * 判断字符串是否为已经序列化过
 * @param $str
 * @return bool
 */
function cmf_is_serialized($str)
{
    return ($str == serialize(false) || @unserialize($str) !== false);
}

23、截取指定两个字符之间字符串

/*
 * php截取指定两个字符之间字符串
 * */
function get_between_str($input, $start, $end)
{
    $substr = substr($input, strlen($start) + strpos($input, $start), (strlen($input) - strpos($input, $end)) * (-1));

    return $substr;
}
PHP 对象、数组、字符串、转义等
© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    blank

    暂无评论内容