源数组
`
$data=array(
\'0\'=>array(
\'id\'=>\'1\',
\'sold\'=>15
),
\'1\'=>array(
\'id\'=>\'2\',
\'sold\'=>10
),
\'2\'=>array(
\'id\'=>\'3\',
\'sold\'=>8
),
\'3\'=>array(
\'id\'=>\'5\',
\'sold\'=>30
),
\'4\'=>array(
\'id\'=>\'7\',
\'sold\'=>12
),
\'5\'=>array(
\'id\'=>\'12\',
\'sold\'=>15
),
\'6\'=>array(
\'id\'=>\'17\',
\'sold\'=>3
)
);
`
需求
-
functionmaopao($data,$key,$sort){
}
说明:将一个二维数组以某一个第二维的值进行升序或者降序排列,其中参数$data为一个
二维数组,$key为第二维的键名,$sort为升序或者降序排列方式。 -
functionzhenghe($data,$key){
}
说明:将数组按照某一个第二维的值进行整合,其中参数$data为一个二维数组,$key为第
二维的键名 -
functionzhuanhuan($data,$type){
}
说明:将数组进行格式转换返回值为对应格式的字符串,其中其中参数$data为一个二维数
组,$type为转换格式,其中有:json,xml,stdclass,object四种类型, -
数据导出
functiondaochu($data,$type){
}
说明:将数组进行导出,导出的文件为对应格式,其中其中参数$data为一个二维数组,$type
为转换格式,其中有:xls,xml,ini三种类型,
实现代码
`
<?php
class HuBiao
{
/**
* @param $data 二维数组
* @param $key 第二维键名
* @param $sort 排序方式 \'ASC\' or \'DESC\'
*/
function maopao($data,$key,$sort){
//判断键名
if($key!=HuBiao::arrayTwo($data)){
echo \'键值输入错误\';
return;
}
if($sort=="ASC"){
for($i=0;$i<count($data);$i++){
for($j=$i;$j<count($data);$j++){
if($data[$i][$key]>$data[$j][$key]){
$temp=$data[$i];
$data[$i]=$data[$j];
$data[$j]=$temp;
}
}
}
foreach($data as $key=>$val){
foreach($val as $k=>$v){
echo $k.\':\'.$v;
}
echo \'<br>\';
}
}else{
for($i=0;$i<count($data);$i++){
for($j=$i;$j<count($data);$j++){
if($data[$i][$key]<$data[$j][$key]){
$temp=$data[$i];
$data[$i]=$data[$j];
$data[$j]=$temp;
}
}
}
foreach($data as $key=>$val){
foreach($val as $k=>$v){
echo $k.\':\'.$v;
}
echo \'<br>\';
}
}
}
//返回二维数组第二维键名
public static function arrayTwo($data){
$num = 0;
foreach($data as $key=>$val) {
foreach ($val as $k => $v){
if($num==1)
return $k;
$num++;
}
}
}
/**
* @param $data 多维数组
* @param $key 第二维键名
*/
function zhenghe($data,$key){
//判断键名
if($key!=HuBiao::arrayTwo($data)){
echo \'键值输入错误\';
return;
}
$newArray=array();
foreach($data as $temp){
$newArray[$temp[$key]][]=$temp;
}
//输出测试
foreach($newArray as $table){
foreach($table as $row){
foreach($row as $col){
echo $col.\' \';
}
echo \'<br>\';
}
echo \'<br>\';
}
}
/**
* @param $data 数组
* @param $type 转换类型 \'json\'\'xml\'\'object\'\'std\'
*/
function zhuanhuan($data,$type){
if($type==\'json\'){
return json_encode($data);
}else if($type==\'xml\'){
return HuBiao::arrayToXml($data);
}else {
/*$obj = new stdClass();
foreach($data as $key => $value){
$obj -> $key = $value;
}
return $obj;*/
return json_decode(json_encode($data));
}
}
//转换xml的中间函数
public static function arrayToXml($arr){
$xl = \'\';
foreach ($arr as $key=>$val){
if(is_array($val)){
$xl.=htmlspecialchars("<").$key.htmlspecialchars(">").HuBiao::arrayToXml($val).htmlspecialchars("</").$key.htmlspecialchars(">");
}else{
$xl.= htmlspecialchars("<").$key.htmlspecialchars(">").$val.htmlspecialchars("</").$key.htmlspecialchars(">");
}
}
return $xl;
}
/**
* @param $data 数组
* @param $type 导出文件类型 \'excell\'
*/
function daochu($data,$type){
if($type==\'excell\'){
$title = array(\'顺序号\',\'商品id\',\'售卖时间\',\'数量\',\'金额\');
HuBiao:: exportexcel($data,$title,\'用户表\');
}else if($type==\'xml\'){
// 创建新的simpleXML实例,注入内存,确定根节点
$xml = new SimpleXMLElement(\'<root/>\');
// 回调函数
HuBiao::array_to_XML($xml, $data);
// 保存为XML文件
$filename = \'C:/Users/Public/Desktop/data.xml\';
echo (($xml->asXML($filename)) ? \'Your XML file has been generated successfully! Location: 桌面 data.xml\':\'Error generating XML file!\');
}else{
$iniString = \'\';
foreach($data as $key=>$val){
$iniString.=\'{\'.\'item\'.$key.\'}\'."\r\n";
foreach ($val as $ck => $cv){
$iniString.= $ck.\':\'.$cv."\r\n";
}
}
$filename = \'C:/Users/Public/Desktop/data.ini\';
echo file_put_contents($filename,$iniString)? \'Your XML file has been generated successfully! Location:桌面 data.ini\':\'Error generating XML file!\';
}
}
/**
2 * 导出数据为excel表格
3 *@param $data 一个二维数组,结构如同从数据库查出来的数组
4 *@param $title excel的第一行标题,一个数组,如果为空则没有标题
5 *@param $filename 下载的文件名
6 *@examlpe1*/
public static function exportexcel($data=array(),$title=array(),$filename=\'report\'){
ob_end_clean();
ob_start();
header("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=".urlencode($filename).".xls");
header("Pragma: no-cache");
header("Expires: 0");
//导出xls 开始
if (!empty($title)){
foreach ($title as $k => $v) {
$title[$k]=iconv("UTF-8", "GB2312",$v);
}
$title= implode("\t", $title);
echo "$title\n"; }
if (!empty($data)){
$numt = 0;
$sumpricet = 0;
foreach($data as $key=>$val){
foreach ($val as $ck => $cv) {
if($ck==\'time\'){
$myDateTime = DateTime::createFromFormat(\'Y-m-d h:i:s\', $cv);
$cv = $myDateTime->format(\'Y/m/d h:i\');
}
if($ck==\'num\'){
$numt = $numt+$cv;
}
if($ck==\'sumprice\'){
$sumpricet = $sumpricet+$cv;
}
$data[$key][$ck]=iconv("UTF-8", "GB2312", $cv);
}
$data[$key]=implode("\t ", $data[$key]);
}
echo implode("\n",$data);
echo "\n\t\t";
$name = iconv("UTF-8", "GB2312",\'总和:\');
$temp = array($name,$numt,$sumpricet);
$temp= implode("\t", $temp);
echo "$temp\n";
}
}
// 到处到XMl文件的中间函数
public static function array_to_XML($obj, $array)
{
foreach ($array as $k => $v)
{
if(is_numeric($k))
$k = \'item\' . $k;
if(is_array($v)){
$node = $obj->addChild($k);
HuBiao::array_to_XML($node, $v);
}else{
$obj->addChild($k, htmlspecialchars($v));
}
}
}
}
//冒泡测试
/* $data = array(
\'0\' => array(
\'id\' => \'1\',
\'sold\' => 15
),
\'1\' => array(
\'id\' => \'2\',
\'sold\' => 10
),
\'2\' => array(
\'id\' => \'3\',
\'sold\' => 8
),
\'3\' => array(
\'id\' => \'5\',
\'sold\' => 30
),
\'4\' => array(
\'id\' => \'7\',
\'sold\' => 12
),
\'5\' => array(
\'id\' => \'12\',
\'sold\' => 18
),
\'6\' => array(
\'id\' => \'17\',
\'sold\' => 3
)
);
$key = \'sold\';
$sort = \'DESC\';
$hb = new HuBiao();
$hb->maopao($data,$key,$sort);*/
/*//zhenghe()测试
$data = array(
\'0\' => array(
\'id\' => \'1\',
\'goods_id\' => \'g001\',
\'time\' => \'2020-03-25 09:01:34\'
),
\'1\' => array(
\'id\' => \'2\',
\'goods_id\' => \'g003\',
\'time\' => \'2020-03-25 09:10:15\'
),
\'2\' => array(
\'id\' => \'3\',
\'goods_id\' => \'g001\',
\'time\' => \'2020-03-25 09:35:49\'
),
\'3\' => array(
\'id\' => \'4\',
\'goods_id\' => \'g004\',
\'time\' => \'2020-03-25 09:38:14\'
),
\'4\' => array(
\'id\' => \'5\',
\'goods_id\' => \'g001\',
\'time\' => \'2020-03-25 10:32:34\'
)
);
$hb = new HuBiao();
$hb->zhenghe($data,\'goods_id\');*/
//格式转换测试
/* $data = array(
\'0\' => array(
\'id\' => \'1\',
\'goods_id\' => \'g001\',
\'time\' => \'2020-03-25 09:01:34\'
),
\'1\' => array(
\'id\' => \'2\',
\'goods_id\' => \'g003\',
\'time\' => \'2020-03-25 09:10:15\'
),
\'2\' => array(
\'id\' => \'3\',
\'goods_id\' => \'g004\',
\'time\' => \'2020-03-25 09:35:49\'
),
\'3\' => array(
\'id\' => \'4\',
\'goods_id\' => \'g001\',
\'time\' => \'2020-03-25 09:38:14\'
),
\'4\' => array(
\'id\' => \'5\',
\'goods_id\' => \'g001\',
\'time\' => \'2020-03-25 10:32:34\'
)
);*/
//转换为xml测试
/*$hb = new HuBiao();
$hb->zhuanhuan($data,\'xml\');*/
//转换为object测试
/*$hb = new HuBiao();
print_r($hb->zhuanhuan($data,\'std\')) ;*/
//导出Excell测试
/*$data = array(
\'0\' => array(
\'id\' => \'1\',
\'goods_id\' => \'g001\',
\'time\' => \'2020-03-25 09:01:34\',
\'num\' => 1,
\'sumprice\' => 25.00
),
\'1\' => array(
\'id\' => \'2\',
\'goods_id\' => \'g003\',
\'time\' => \'2020-03-25 09:10:15\',
\'num\' => 2,
\'sumprice\' => 49.00
),
\'2\' => array(
\'id\' => \'3\',
\'goods_id\' => \'g004\',
\'time\' => \'2020-03-25 09:35:49\',
\'num\' => 1,
\'sumprice\' => 30.00
),
\'3\' => array(
\'id\' => \'4\',
\'goods_id\' => \'g001\',
\'time\' => \'2020-03-25 09:38:14\',
\'num\' => 3,
\'sumprice\' => 75.00
),
\'4\' => array(
\'id\' => \'5\',
\'goods_id\' => \'g001\',
\'time\' => \'2020-03-25 10:32:34\',
\'num\' => 1,
\'sumprice\' => 25.00
)
);
$hb = new HuBiao();*/
//$hb->daochu($data,\'excell\');
//$hb->daochu($data,\'xml\');
//$hb->daochu($data,\'ini\');
`