前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP开发技巧之【数组】工具类,封装14个常用数组处理方法!

PHP开发技巧之【数组】工具类,封装14个常用数组处理方法!

作者头像
程序猿的栖息地
发布2022-04-29 16:06:17
1.4K0
发布2022-04-29 16:06:17
举报
文章被收录于专栏:程序猿的栖息地

1、二维数组去掉重复值

代码语言:javascript
复制
/**
     * @desc: 二维数组去掉重复值
     * @param array $array2D
     * @return multitype:
     */
    public function arrayUniqueFb($array2D){

        $data = array();
        if(!empty($array2D)){
            foreach ($array2D as $v){
                $v=join(',',$v);//降维,也可以用implode,将一维数组转换为用逗号连接的字符串
                $data[]=$v;
            }
            $data = array_unique($data);//去掉重复的字符串,也就是重复的一维数组
            foreach ($data as $k => $v){
                $data[$k]=explode(',',$v);//再将拆开的数组重新组装
            }
        }
        return $data;

    }

2、去除二维数组中的重复项

代码语言:javascript
复制
/**
     * @desc 去除二维数组中的重复项
     * @param $array
     * @return array
     */
    public function removeArrayDuplicate($array){
        $result=array();
        for($i=0;$i<count($array);$i++){
            $source=$array[$i];
            if(array_search($source,$array)==$i && $source<>"" ){
                $result[]=$source;
            }
        }
        return $result;
    }

3、二维数组根据字段进行排序

代码语言:javascript
复制
/**
     * @desc 二维数组根据字段进行排序
     * @params array $array 需要排序的二维数组
     * @params string $field 排序的字段
     * @params string $sort 排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
     */
    public function arraySequence($array, $field, $sort = 'SORT_DESC')
{
        $arrSort = array();
        foreach ($array as $uniqid => $row) {
            foreach ($row as $key => $value) {
                $arrSort[$key][$uniqid] = $value;
            }
        }
        array_multisort($arrSort[$field], constant($sort), $array);
        return $array;
    }

4、数组转xml

代码语言:javascript
复制
/**
     * @desc 数组转xml
     * @param $arr
     * @param int $level
     * @return mixed|string
     */
    public function arrayToXml($arr, $level = 1) {

        $s = $level == 1 ? "<xml>" : '';
        foreach ($arr as $tagname => $value) {
            //元素为数组或者不为数组的处理
            if (!is_array($value)) {
                $s .= "<{$tagname}>" . (!is_numeric($value) ? '<![CDATA[' : '') . $value . (!is_numeric($value) ? ']]>' : '') . "</{$tagname}>";
            } else {
                $s .= "<{$tagname}>" . array2xml($value, $level + 1) . "</{$tagname}>";
            }
        }
        //过滤不合法的字符串
        $s = preg_replace("/([\x01-\x08\x0b-\x0c\x0e-\x1f])+/", ' ', $s);
        return $level == 1 ? $s . "</xml>" : $s;

    }

5、过滤数组元素前后空格 (支持多维数组)

代码语言:javascript
复制
/**
     * @desc 过滤数组元素前后空格 (支持多维数组)
     * @param $array 要过滤的数组
     * @return array|string
     */
    public function trimArrayElement($array){

        if(!is_array($array))
            return trim($array);
        return array_map('trim_array_element',$array);

    }

6、将二维数组以元素的某个值作为键 并归类数组

代码语言:javascript
复制
/**
     * @desc 将二维数组以元素的某个值作为键 并归类数组
     * array( array('name'=>'aa','type'=>'pay'), array('name'=>'cc','type'=>'pay') )
     * array('pay'=>array( array('name'=>'aa','type'=>'pay') , array('name'=>'cc','type'=>'pay') ))
     * @param $arr 数组
     * @param $key 分组值的key
     * @return array
     */
    public function groupSameKey($arr,$key){

        $new_arr = array();
        foreach($arr as $k=>$v ){
            $new_arr[$v[$key]][] = $v;
        }
        return $new_arr;

    }

7、多个数组的笛卡尔积

代码语言:javascript
复制
/**
     * @desc 多个数组的笛卡尔积
     * @param $data
     * @return array
     */
    public function combineDiKa() {

        $data = func_get_args();
        $data = current($data);
        $cnt = count($data);
        $result = array();
        $arr1 = array_shift($data);
        foreach($arr1 as $key=>$item)
        {
            $result[] = array($item);
        }

        foreach($data as $key=>$item)
        {
            $result = $this->combineArray($result,$item);
        }
        return $result;

    }

8、两个数组的笛卡尔积

代码语言:javascript
复制
/**
     * @desc 两个数组的笛卡尔积
     * @param $arr1
     * @param $arr2
     * @return array
     */
    function combineArray($arr1,$arr2) {

        $result = array();
        foreach ($arr1 as $item1)
        {
            foreach ($arr2 as $item2)
            {
                $temp = $item1;
                $temp[] = $item2;
                $result[] = $temp;
            }
        }
        return $result;

    }

9、多维数组转化为一维数组

代码语言:javascript
复制
/**
     * @desc 多维数组转化为一维数组
     * @param $array 多维数组
     * @return array 一维数组
     */
    function arrayMulti2single($array)
{
        static $result_array = array();
        foreach ($array as $value) {
            if (is_array($value)) {
                $this->arrayMulti2single($value);
            } else
                $result_array [] = $value;
        }
        return $result_array;
    }

10、二维数组排序

代码语言:javascript
复制
/**
     * @二维数组排序
     * @param $arr
     * @param $keys
     * @param string $type
     * @return array
     */
    public function arrayMulti2sort($arr, $keys, $type = 'desc')
{

        $key_value = $new_array = array();
        foreach ($arr as $k => $v) {
            $key_value[$k] = $v[$keys];
        }
        if ($type == 'asc') {
            asort($key_value);
        } else {
            arsort($key_value);
        }
        reset($key_value);
        foreach ($key_value as $k => $v) {
            $new_array[$k] = $arr[$k];
        }
        return $new_array;

    }

11、将数据库中查出的列表以指定的 id 作为数组的键名

代码语言:javascript
复制
/**
     * @param $arr
     * @param $key_name
     * @return array
     * 将数据库中查出的列表以指定的 id 作为数组的键名
     */
    public function convertArrKey($arr, $key_name)
{
        $arr2 = array();
        foreach($arr as $key => $val){
            $arr2[$val[$key_name]] = $val;
        }
        return $arr2;
    }

12、将数据库中查出的列表以指定的 id 作为数组的键名

代码语言:javascript
复制
/**
     * @desc 将数据库中查出的列表以指定的 id 作为数组的键名
     * @param $array
     * @param $key_name
     * @param $key_name_two
     * @return array
     */
    public function _convertArrKey($array, $key_name, $key_name_two)
{
        $re = array();
        $arr = array();
        foreach($array as $a) {
            $tmp_v = $a;
            unset($tmp_v[$key_name]);
            if(isset($re[$a[$key_name]])) {
                $re[$a[$key_name]][] = $tmp_v;
            }else{
                $re[$a[$key_name]] = array($tmp_v);
            }
        }
        foreach($re as $key => $val){
            $arr[]=array(
                $key_name => $key,
                $key_name_two => $val
            );
        }
        return $arr;
    }

13、对象转数组,PHP stdClass Object转array

代码语言:javascript
复制
/**
     * @desc 对象转数组,PHP stdClass Object转array
     * @param $array
     * @return array
     */
    public function object_array($array) {

        if(is_object($array)) {
            $array = (array)$array;
        } if(is_array($array)) {
            foreach($array as $key => $value) {
                $array[$key] = $this->object_array($value);
            }
        }
        return $array;

    }

14、替换数组中的某个value值

代码语言:javascript
复制
/**
     * @desc 替换数组中的某个value值
     * @param string $find 要替换的字符串
     * @param string $replace 要被替换成什么的字符串
     * @param array $list 要替换的数组
     * @return array|mixed
     */
    public function arrayValueReplace($find = '', $replace = '', $list = []){

        if(empty($find)){
            return $list;
        }
        $find = ":".json_encode($find);
        $replace = ":".json_encode($replace);
        $str = json_encode($list);
        $replace_str = str_replace($find, $replace, $str);
        $list = json_decode($replace_str, true);

        return $list;

    }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿的栖息地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档