PHP - 实战中用到的 “数组” 有关的自定义函数

简单粗暴 ⛽️

以下函数都为实际项目中用到,没有收藏原文地址。
原创大佬看到后,进行留言,我再加上您的原文地址。

PHP 二维数组按某个键转为一维数组

$array = array_column($array, $key);



PHP 二维数组按某个键的值设置为数组新的下标

$array = array_column($array, null, $key);



PHP 二维数组排序

/**
 * 二维数组 排序
 * @param [array]     $array    排序数组
 * @param [string]    $key      进行排序的键
 * @param [string]    $order    升序|降序 (asc|desc)
 * @return [array]    $arr		排序后的数组
 */
function arraySort($array, $key, $order = "asc") {//asc是升序 desc是降序
    $arr_nums = $arr = array();
    foreach ($array as $k => $v) {
        $arr_nums[$k] = $v[$key];
    }
    if ($order == 'asc') {
        asort($arr_nums);
    } else {
        arsort($arr_nums);
    }
    foreach ($arr_nums as $k => $v) {
        $arr[$k] = $array[$k];
    }
    return $arr;
}



PHP 二维数组按某个键去掉重复值

/**
 * 二维数组去掉重复值
 * @param [array]     $arr      操作数组
 * @param [string]    $key      判断的key值 
 * @return [array]    $res		处理后的数组
 */
function array_unset($arr,$key){       
    //建立一个目标数组    
	$res = array();          
	foreach ($arr as $value) {             
       //查看有没有重复项    
		if(isset($res[$value[$key]])){    
          unset($value[$key]);  //有:销毁    
      }else{      
      	$res[$value[$key]] = $value;    
      }      
  }    
  return $res;    
} 



PHP 二维数组根据某个键分组

/**
 * 二维数组根据某个键分组
 * @param [array]   $arr    要处理的数组
 * @param [string]  $key    键值
 * @return [array]  $grouped 分组后的数据
 */
function arrayGroupBy($arr, $key){
    $grouped = [];
    foreach ($arr as $value) {
        $grouped[$value[$key]][] = $value;
    }
    if (func_num_args() > 2) {
        $args = func_get_args();
        foreach ($grouped as $key => $value) {
            $parms = array_merge([$value], array_slice($args, 2, func_num_args()));
            $grouped[$key] = call_user_func_array('arrayGroupBy', $parms);
        }
    }
    return $grouped;
}



PHP 将 xml 转为数组

/** 
 * PHP 将 xml 转为数组 
 * @param  [string]   $xml    xml字符串或者xml文件名 
 * @param  [bool]     $isfile 传入的是否是xml文件名 
 * @return [array]    $result 转换得到的数组 
 */  
function xmlToArray($xml,$isfile=false){     
    //禁止引用外部xml实体  
    libxml_disable_entity_loader(true);  
    if($isfile){  
        if(!file_exists($xml)) return false;  
        $xmlstr = file_get_contents($xml);  
    }else{  
        $xmlstr = $xml;  
    }  
    $result= json_decode(json_encode(simplexml_load_string($xmlstr, 'SimpleXMLElement', LIBXML_NOCDATA)), true);          
    return $result;  
}  



PHP 将数组转为 xml

/** 
 * PHP 将数组转为 xml
 * @param  [array]   $data  需要转换的数组 
 * @return [string]  $xml   xml字符串 
**/  
function arrayToXml($data){  
    if(!is_array($data) || count($data) <= 0){  
        return false;  
    }  
    $xml = "<xml>";  
    foreach ($data as $key=>$val){  
        if (is_numeric($val)){  
            $xml.="<".$key.">".$val."</".$key.">";  
        }else{  
            $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";  
        }  
    }  
    $xml.="</xml>";  
    return $xml;   
} 



PHP 生成树状数据

/**
 * PHP 生成树状数据
 * @param  [array]  $data        二维数组
 * @param  [string] $parent_key  原始数据父级字段
 * @param  [string] $child_key   生成子集的字段
 * @return [array]               树状数据
 */
function treeArray($data,$parent_key,$child_key){
    $tree = array();
    foreach ($data as $key => $val) {
        if ($val[$parent_key] == 0) {
            $tree[] = &$data[$key];
        } else {
            $data[$val[$parent_key]][$child_key][] = &$data[$key];
        }
    }
    return $tree;
}



PHP 生成树状数据

/**
 * PHP 生成树状数据
 * @param  [array]  $data        二维数组
 * @param  [string] $parent_key  原始数据父级字段
 * @param  [string] $child_key   生成子集的字段
 * @return [array]               树状数据
 */
function generateTree($items,$parent_key = 'parent_id',$child_key = 'children'){

    $tree = array();
    foreach($items as $k => $item){
        if(isset($items[$item[$parent_key]])){
            $items[$item[$parent_key]][$child_key][] = &$items[$k];
        }else{
            $tree[] = &$items[$k];
        }
    }
    return $tree;
}



PHP 生成树状数据

/**
 * PHP 生成树状数据
 * @param [array]  $array 要处理的数组
 * @param [string] $pid   父ID
 * @param [string] $level 等级
 * @return [array] $list  分组后的数据
 */
function array2level($array, $pid = 0, $level = 1) {
    static $list = [];
    foreach ($array as $v) {
        if ($v['parentid'] == $pid) {
            $v['level'] = $level;
            $list[] = $v;
            $this->array2level($array, $v['id'], $level + 1);
        }
    }
    return $list;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端木木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值