PHPExcel导出excel入门实例教程
PHPExcel是一个强大的excel导出/导入插件,它甚至还可以导出pdf等,是个非常好用的php插件,php学习必不可少。那么如何使用它呢,下面是PHPExcel入门范例:
php源码参考:
<?php
require_once("PHPExcel/PHPExcel.php");
$excel = new PHPExcel(); //实例化PHPExcel类
//设置作者(非必要)
$excel->getProperties()->setCreator("Reson");
//以下是要导出的数据
$datas = array(
array(
0 => 'UID',
1 => '用户名',
2 => '性别'
),
array(
0 => '1',
1 => 'reson',
2 => '男'
),
array(
0 => '2',
1 => 'anyse',
2 => '女'
)
);
//开始导出。注意$i要从1开始,不能从0开始,原因如下:'A'.$i,当i=1即为A1(第一行,第一个格子)
$i = 1;
foreach($datas as $key => $val){
$excel->getActiveSheet()->setCellValue('A'.$i, $val['0']);
$excel->getActiveSheet()->setCellValue('B'.$i, $val['1']);
$excel->getActiveSheet()->setCellValue('C'.$i, $val['2']);
$i++;
}
$excel->getActiveSheet()->setTitle('php学习人员名单'); //含义见下图
$fileName = 'test';
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");;
header('Content-Disposition: attachment;filename="'.$fileName.'.xls"');
header("Content-Transfer-Encoding:binary");
$objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$objWriter->save('php://output');
?>
出后就是这个样子了,是不是非常好用呢
php语言本身没有将多维数组转为一维数组的函数,但是我们可以自己写一个php函数来实现将多维转一维的功能。
运用了递归,简单粗暴,整个函数体9行代码就实现了该功能,php源码如下:
$multi = array(
array(
array(
'wo',
'shi'
),
'php'
),
'cheng',
array(
array(
'xu',
'yuan',
)
),
'!'
);
$multi = arrToOne($multi);
print_r($multi);
function arrToOne($multi) {
$arr = array();
foreach ($multi as $key => $val) {
if( is_array($val) ) {
$arr = array_merge($arr, arrToOne($val));
} else {
$arr[] = $val;
}
}
return $arr;
}
执行后的效果:
Array
(
[0] => wo
[1] => shi
[2] => php
[3] => cheng
[4] => xu
[5] => yuan
[6] => !
)
在WordPress中很多地方使用stdClass来定义一个对象(而通常是用数组的方式),然后使用get_object_vars来把定义的对象『转换』成数组。
如下代码所示:
PHP
$tanteng = new stdClass();
$tanteng->name = 'tanteng';
$tanteng->email = 'xxx@qq.com';
$info = get_object_vars($tanteng);
print_r($info);exit;
输出:
Array ( [name] => tanteng [email] => xxx@qq.com )
get_object_vars的作用是返回由对象属性组成的关联数组。它的效果跟这样定义数组其实是一样的:
PHP
$tanteng = array();
$tanteng['name'] = 'tanteng';
$tanteng['email'] = 'xxx@qq.com';
可以这样理解:stdClass是一个内置类,它没有成员变量,也没有成员方法的一个类。new一个stdClass就是实例化了一个『空』对象,它本身没什么意义,但是用stdClass定义有什么好处呢?
如下代码:
PHP
$user = new stdClass();
$user->name = 'gouki';
$user->hehe = 'hehe';
$myUser = $user;
$myUser->name = 'flypig';
print_r($user);
print_r($myUser);
print_r($user);
这里$myUser被赋值$user,但其实并没有新开辟一块内存存储变量,$myUser还是指的stdClass这个对象,通过$myUser改变属性页就改变了$user的属性,并不是新建一个副本,如果程序中有许多这样的操作,使用stdClass的方式可以节省内存开销。
运行结果:
PHP
stdClass Object
(
[name] => flypig
[hehe] => hehe
)
stdClass Object
(
[name] => flypig
[hehe] => hehe
)
stdClass Object
(
[name] => flypig
[hehe] => hehe
)
从结果可以看出,改变$myUser的属性确实改变了$user声明的stdClass属性。而如果$user是一个数组,赋值给$myUser,那就拷贝了一个副本给$myUser,这样增大系统开销。
当然,你也可以反过来,把一个数组转换为对象:
PHP
$hehe['he1'] = 'he1';
$hehe['he2'] = 'he2';
$hh = (object) $hehe;
print_r($hh);
打印结果:
stdClass Object ( [he1] => he1 [he2] => he2 )
CWidget是所有Widget的基类。CWidget是自包含组件,可以看出是MVC的简略版,CWidget相比Controller,既没有actions,也没有filterswidget,英文意思为小工具,小挂件,在程序里大概也是这个意思,Yii2中叫做组件,这个示例仅仅是写一个基本的Yii2 widget,看看能不能运行。
关于widgets,他们在yii中的关系如下
system.web.widgets 系统自带最基本的widget
zii.widgets 是基本扩展
zii.widgets.grid 是基本扩展的重要分支
zii.widgets.jui 是插件扩展
一,system.web.widgets
包括:
CActiveForm
CAutoComplete
CClipWidget
CContentDecorator
CFilterWidget
CFlexWidget
CHtmlPurifier
CInputWidget
CMarkdown
CMaskedTextField
CMultiFileUpload
COutputCache
COutputProcessor
CStarRating
CTabView
CTextHighlighter
CTreeView
CWidget
看vendor/yiisoft/yii2/base/Widget.php的定义,widget需要继承这个类,begin,end,widget,run这些方法都可以在子类进行重写定义,这里我们重写run试试。
新建一个类Testwidgets.php:
namespace common\widgets;
use yii\base\Widget;
class Testwidgets extends Widget
{
public function __Construct()
{
echo 'test test ...';
}
public function run()
{
echo 'run run run ...';
}
}
在一个模板文件中这样使用:
<?php
/* @var $this yii\web\View */
use common\widgets\Testwidgets;
?>
<p>
<?php echo Testwidgets::widget();?>
</p>
页面输出:
test test …run run run …
是不是很简单,当然这只是一个最简单的Yii2 widget,只是搞清楚写widget的基本方式。
比如Yii2的表单widget,涉及到很多用法,就要定义额外的类和方法来实现需求。
<?php $model = new User();?>
<?php $form = ActiveForm::begin(['id'=>'login-form']);?>
<?= $form->field($model,'username')->label('用户名') ?>
<?= $form->field($model,'password_hash')->passwordInput()->label('密码') ?>
<?php ActiveForm::end() ;?>
这样就很方便生成一个表单,而且可以灵活设置各种属性,其实原理都是一样的。
关于Yii2的表单widget,可以好好研究一下,写的很妙。两个文件:
vendor/yiisoft/yii2/widgets/ActiveForm.php和vendor/yiisoft/yii2/widgets/ActiveField.php
使用示例
Yii2封装了一个表单widget,很方便生成各类各式的表单,试了几种表单,可以自由设置样式、类型、属性,如下代码:
<?php $model = new User();?>
<?php $form = ActiveForm::begin(['id'=>'login-form']);?>
<?= $form->field($model,'username')->label('用户名') ?>
<?= $form->field($model,'password_hash')->passwordInput()->label('密码') ?>
<?= $form->field($model,'email')->textarea(['rows'=>5]) ?>
<?= $form->field($model,'status')->checkboxList([1=>'hehe',2=>'haha',3=>'xixi',4=>'heihei'],['id'=>'dddd'])->label('多选') ?>
<?php ActiveForm::end() ;?>
如果想更全面了解如何使用,还是需要看一看源码,才能更好的灵活使用yii2的生成表单widget.
源码文件位置:vendor/yiisoft/yii2-gii/components/ActiveField.php
函数引用与php中变量引用一样使用的是&符号了,今天我们就一起来看看函数的引用返回的一些例子,希望这些例子能够对各位有帮助.引用返回
手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用
当你想将函数的返回引用绑定到某个变量时,PHP允许你这么做:
function &returns_reference()
{
static $someref = 0;
$someref++;
return $someref;
}
$newref = &returns_reference();//引用返回,相当于 $newref = &$someref;
echo $newref; //1
$notref = returns_reference(); //值传递的是副本
$newref = 100;
echo $notref; //2
$newref = 100;
echo returns_reference(); //101
可见,想让函数返回引用,必须在函数申明和赋值时都带上&操作符。
对于类中方法也是如此:
class foo {
public $value = 0;
public function &getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;
一些简单的例子
看下面的简单例子,尝试去理解引用返回。
<?php
function &test()
{
// 声明一个静态变量
static $b = 0;
$b = $b+1;
echo $b;
return $b;
}
$a = test(); //这条语句会输出 $b 的值为 1
$a = 5;
$a = test(); //这条语句会输出 $b 的值为2
$a = &test(); //这条语句会输出 $b 的值为3
$a = 5;
$a = test(); //这条语句会输出 $b的值 为6
?>
程序运行结果:
1
2
3
6
尽管函数声明方式是 function &test() 这样,但我们通过这种方式 $a = test() 的函数调用得到的其实不是函数的引用返回,这跟普通的函数调用没有区别。PHP 规定通过 $a = &test() 这种方式得到的才是函数的引用返回。
用上面的例子来解释就是,$a = test() 这种方式调用函数,只是将函数的值赋给 $a 而已,而$a做任何改变都不会影响到函数中的$b。
而通过 $a = &test() 方式调用函数呢,它的作用是将 return $b 中的 $b 变量的内存地址与 $a 变量的内存地址指向了同一个地方。即产生了相当于这样的效果 ($a=&$b), 所以改变 $a 的值也同时改变了 $b 的值。所以在执行了
$a = &test();
$a = 5;
以后,$b的值变为了5。
再来个程序例子加深理解:
<?php
/*
** 值传递和引用传递,值传递传递的是值的一个复本,引用传递传递的是值指向的内存地址
*/
// 函数的引用,定义时也要加上 &
function &func($a,$b){
// 这里为了更直观看到效果,定义一个静态变量
static $result = 0;
$result+=$a+$b;
echo $result.'<br />';
return $result;
}
$a = $b = 10;
// PHP里这样写函数的引用调用,和调用普通函数没有区别(只是将函数的返回值复制给$c这个变量,$c做任何改变不会影响上面函数中的$result)
// 要记住:PHP里的函数引用定义及调用都要在函数名前加上 &
$c = func($a,$b);
// 第一次执行func(),其静态变量$result的值变为 20(10+10)
// 改变$c的值,不会对下面一行语句产生影响
$c = 666;
// 第二次执行func(),其静态变量$result的值变为 40(20+10+10)
$c = func($a,$b);
echo '<hr />';
// 这样才是PHP中引用函数的调用方式
$d = &func($a,$b);
// 第三次执行func(),其静态变量$result的值变为 40(40+10+10)
$d = 888;
// 第四次执行func(),其静态变量$result的值变为 908(888+10+10)
$d = func($a,$b);
?>
相关文章
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 这篇文章算是超级入门级别的了,我们下面来给各位介绍在photoshop画斜线/直线/虚线的教程了,希望下面这篇文章给你入门来帮助。 PS怎么画斜线 选择铅笔工具,或者画笔...2016-09-14
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- C# 导出 Excel 的6种简单方法:数据表导出到 Excel,对象集合导出到 Excel,数据库导出到 Excel,微软网格控件导出到 Excel,数组导出到 Excel,CSV 导出到 Excel,你都会了吗?需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要为大家分享了20分钟MySQL基础入门教程,快速掌握MySQL基础知识,真正了解MySQL,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-12-02
- 这篇文章主要介绍了react hooks入门详细教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-06
- 这篇文章主要给大家总结介绍了R语言导入导出数据的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-06
- 这篇文章主要介绍了详解Servlet入门级设置(超详细 IDEA2020版),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-04
- 这里主要讲到关于在php教程类的调用,申请明,使用以前各种类的实例方法与操作过程,让你清楚的知道php类的construct destruct clone call wake sleep用法。 简单购物车...2016-11-25
- MySQL发展到今天,InnoDB引擎已经作为绝对的主力,除了像大数据量分析等比较特殊领域需求外,它适用于众多场景。然而,仍有不少开发者还在“执迷不悟”的使用MyISAM引擎,觉得对InnoDB无法把握好,还是MyISAM简单省事,还能支持快...2015-11-24
phpexcel导入xlsx文件报错xlsx is not recognised as an OLE file 怎么办
phpexcel是一款php读写excel的插件了,小编有一个这样的功能要来实现,但是在导入xlsx时发现xlsx is not recognised as an OLE file 了,但是导入xls是没有问题了,碰到这种...2016-11-25- 让C# Excel导入导出,支持不同版本的Office,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要为大家详细介绍了java导出csv格式文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-12-31
- 这篇文章主要介绍了阿里云ECS服务器入门使用流程(新手必看教程),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-13
- PHP大小写问题算是一个入门级的教程了,在此小编为php初学者介绍php开发中大小写的一些例子,希望可以帮助到各位。 今天写代码的时候发现自己代码的一处错误: $m_cate...2016-11-25
- 这篇文章主要介绍了C语言入门之基础知识详解,文中有非常详细的C语言使用教程及相关基础知识,对正在学习c语言的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-08-04
- PHPExcel是php的一个插件,它可以实现读取excel文件也就是xls文件了,下面我们就来看一个PHPExcel操作excel(xls)文件例子,希望能帮助到各位。 读取中文的xls、csv文件...2016-11-25
- Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,本文给大家分享一个入门案例使用Springboot1.5.9搭建,具体配置部署过程跟随小编一起看看吧...2021-07-12
- 这篇文章主要介绍了Vue通过Blob对象实现导出Excel功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-01
- 这篇文章主要介绍了C#导出数据到excel如何提升性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-13