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;
}

Guess you like

Origin blog.csdn.net/qq_35453862/article/details/117216622