php 数据组增加,删除,查询,排序详细说明

 更新时间:2016年11月25日 15:56  点击:2032

对数组的添加(首尾数据添加(不限定条数)以及中间任意位置添加数据操作) . 
2~对数组的删除(首尾的数据删除(不限定条数)以及中间任意位置的数据删除操作,条件:对数组中间位置删除的,后面的值往前挪,接上以前的位置)  .  
3~对数据的排序操作(排序操作,要的是效率)   . 
4~对数组的查询(对数组中的某一数据进行查询,如果满足,则生成新的数组,这个新的数组就是满足查询条件的,条件:查询,并不是查询某一个值,还有查询某一个值满足某个条件,举个例子:查询数组中某个值大于5的,全部筛选出来)


1、php中的数组实质上是map结构,对于索引数组,添加或删除元素,它并不重新索引。
2、避免混合索引数组和关联数组
其余的要求,查找php手册应该有答案。
说实话,我一直记不住那么多函数。
3。默认的冒泡排序,堆排序,快速排序,插入排序,二分。看你的需求情况了
4.还是循环。
PHP数组虽然强大,但效率也很低


2 数组的删除,以字符串为索引的,直接删除就OK。unset
   以数字为索引的,unset删除,然后使用array_values重置数组。
3 usort排序,可以利用callback函数自己来实现算法。效率主要看你写的算法如何。


1~对数组的添加(首尾数据添加(不限定条数)以及中间任意位置添加数据操作) .
arrar_unshift(数组头部添加数据)
array_push(数组尾部添加数组)
arrar_fill(中间任意位置添加)
2~对数组的删除(首尾的数据删除(不限定条数)以及中间任意位置的数据删除操作,条件:对数组中间位置删除的,后面的值往前挪,接上以前的位置)  .
array_shift(数组头部删除数据)
array_pop(数组为不删除数据)


array_slice不会对原始数组造成任何修改,我是想说array_splice。
刚才又查了下手册,发现array_splice功能好强大,对数组的任何位置的任何个数的增删改操作,都可以用array_splice搞定。
关于非哈希数组重建数字索引的问题,array_merge和array_values都可以,刚才经过试验,后者更快

function quickSort(&$data, $beg, $end) 

02 { 

03 if ($end > $beg) { 

04 $piv = $data[$beg]; 

05 $k = $beg + 1; 

06 $r = $end; 

07 while ($k < $r) { 

08 if ($data[$k] < $piv) { 

09 $k++; 

10 } else { 

11 $tmp = $data[$k]; 

12 $data[$k] = $data[$r]; 

13 $data[$r] = $tmp; 

14 $r--; 

15 } 

16 } 

17 if ($data[$k] >= $piv) { 

18 $k--; 

19 } 

20 $tmp = $data[$k]; 

21 $data[$k] = $data[$beg]; 

22 $data[$beg] = $tmp; 

23 quickSort($data, $beg, $k); 

24 quickSort($data, $r, $end); 

25 } 

26 } 

27   

28 function quickSort2(&$data) 

29 { 

30 $stack = array(); 

31 array_push($stack, array(0, count($data) - 1)); 

32 while (list($beg, $end) = array_pop($stack)) { 

33 if ($end > $beg) { 

34 $piv = $data[$beg]; 

35 $k = $beg + 1; 

36 $r = $end; 

37 while ($k < $r) { 

38 if ($data[$k] < $piv) { 

39 $k++; 

40 } else { 

41 $tmp = $data[$k]; 

42 $data[$k] = $data[$r]; 

43 $data[$r] = $tmp; 

44 $r--; 

45 } 

46 } 

47 if ($data[$k] >= $piv) { 

48 $k--; 

49 } 

50 $tmp = $data[$k]; 

51 $data[$k] = $data[$beg]; 

52 $data[$beg] = $tmp; 

53 array_push($stack, array($beg, $k)); 

54 array_push($stack, array($r, $end)); 

55 } 

56 } 

57 } 

58   

59 $data = array(7,6,6,3,8,1,8,1,9,1,3,11,51,1,25); 

60 //selectSort($data); 

61 //insertSort($data); 

62 quickSort2($data);

//ini_set("display_errors",1);//是否显示报错信息
//ini_set('include_path', ini_get('include_path').';D:\www.111cn.net\htdocs\lianxi\1.7.2\Classes');//设置此页面包含路径

require_once("./1.7.2/Classes/PHPExcel.php");
require_once("./1.7.2/Classes/PHPExcel/Writer/Excel5.php");

$objExcel = new PHPExcel();
//print_r($objExcel);
$objWriter = new PHPExcel_Writer_Excel5($objExcel);
//$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用于 2007 格式   
//$objWriter->setOffice2003Compatibility(true);  

//设置文档基本属性    www.111cn.net
$objProps教程 = $objExcel->getProperties();
//print_r($objProps);
$objProps->setCreator("Zeal Li" );   
$objProps->setLastModifiedBy("Zeal Li" );   
$objProps->setTitle("Office XLS Test Document" );   
$objProps->setSubject("Office XLS Test Document, Demo" );   
$objProps->setDescription("Test document, generated by PHPExcel." );   
$objProps->setKeywords("office excel PHPExcel" );   
$objProps->setCategory("Test" );

//*************************************   
//设置当前的sheet索引,用于后续的内容操作。   
//一般只有在使用多个sheet的时候才需要显示调用。   
//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0   
 
$objExcel->setActiveSheetIndex(0);   
  
  
$objActSheet = $objExcel->getActiveSheet();   
$objActSheet = $objExcel->getActiveSheet();  
//设置当前活动sheet的名称   
$objActSheet->setTitle('测试Sheet' );   
  
//*************************************   
//设置单元格内容   
//   
//由PHPExcel根据传入内容自动判断单元格内容类型   
$objActSheet ->setCellValue('A1' , '字符串内容' );  // 字符串内容   
$objActSheet ->setCellValue('A2' , '<a herf="www.111cn.net">26</a>');            // 数值   
$objActSheet ->setCellValue('A3' , true);          // 布尔值   
$objActSheet ->setCellValue('A4' , '=SUM(A2:A2)' ); // 公式   
  
//显式指定内容类型   
$objActSheet ->setCellValueExplicit('A5' , '847475847857487584' ,  PHPExcel_Cell_DataType::TYPE_STRING); 
//合并单元格   
$objActSheet ->mergeCells('B1:C22' );   
  
//分离单元格   
$objActSheet ->unmergeCells('B1:C22' );   

//*************************************   
//设置单元格样式   
//   
  
//设置宽度   
$objActSheet ->getColumnDimension('B' )->setAutoSize(true);   
$objActSheet ->getColumnDimension('A' )->setWidth(30);   
  
$objStyleA5 = $objActSheet ->getStyle('A5' );   

//设置单元格内容的数字格式。   
//   
//如果使用了 PHPExcel_Writer_Excel5 来生成内容的话,   
//这里需要注意,在 PHPExcel_Style_NumberFormat 类的 const 变量定义的   
//各种自定义格式化方式中,其它类型都可以正常使用,但当setFormatCode   
//为 FORMAT_NUMBER 的时候,实际出来的效果被没有把格式设置为"0"。需要   
//修改 PHPExcel_Writer_Excel5_Format 类源代码中的 getXf($style) 方法,   
//在 if ($this->_BIFF_version == 0x0500) { (第363行附近)前面增加一   
//行代码:   
//if($ifmt === '0') $ifmt = 1;   
//   
//设置格式为PHPExcel_Style_NumberFormat::FORMAT_NUMBER,避免某些大数字   
//被使用科学记数方式显示,配合下面的 setAutoSize 方法可以让每一行的内容   
//都按原始内容全部显示出来。   
$objStyleA5->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);

//设置字体   
$objFontA5 = $objStyleA5 ->getFont();   
$objFontA5 ->setName('Courier New' );   
$objFontA5 ->setSize(10);   
$objFontA5 ->setBold(true);   
$objFontA5 ->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);   
$objFontA5 ->getColor()->setARGB('FF999999' );   
  
//设置对齐方式   
$objAlignA5 = $objStyleA5 ->getAlignment();   
$objAlignA5 ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);   
$objAlignA5 ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);   
  
//设置边框   
$objBorderA5 = $objStyleA5 ->getBorders();   
$objBorderA5 ->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);   
$objBorderA5 ->getTop()->getColor()->setARGB('FFFF0000' ); // color   
$objBorderA5 ->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);   
$objBorderA5 ->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);   
$objBorderA5 ->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);   
  
//设置填充颜色   
$objFillA5 = $objStyleA5 ->getFill();   
$objFillA5 ->setFillType(PHPExcel_Style_Fill::FILL_SOLID);   
$objFillA5 ->getStartColor()->setARGB('FFEEEEEE' );

//从指定的单元格复制样式信息.   
$objActSheet ->duplicateStyle($objStyleA5 , 'B1:C22' );   

//*************************************   
//添加图片   
$objDrawing = new PHPExcel_Worksheet_Drawing();   
$objDrawing ->setName('ZealImg' );   
$objDrawing ->setDescription('Image inserted by Zeal' );   
$objDrawing ->setPath('../images/201003/1269919647975424741.jpg' );   
$objDrawing ->setHeight(150);   
$objDrawing ->setCoordinates('C23' );   
$objDrawing ->setOffsetX(10);   
$objDrawing ->setRotation(15);   
$objDrawing ->getShadow()->setVisible(true);   
$objDrawing ->getShadow()->setDirection(36);   
$objDrawing ->setWorksheet($objActSheet );
  
//添加一个新的worksheet   
$objExcel ->createSheet();   
$objExcel ->getSheet(1)->setTitle('测试2' );   
  
//保护单元格   
$objExcel ->getSheet(1)->getProtection()->setSheet(true);   
$objExcel ->getSheet(1)->protectCells('A1:C22' , 'PHPExcel' );   
//*************************************   
//输出内容   
//   
$outputFileName = "output.xls" ;   
//到文件   
$objWriter->save($outputFileName);   
//or   
//到浏览器 
/*
header("Content-Type: application/force-download");   
header("Content-Type: application/octet-stream");   
header("Content-Type: application/download");   
header('Content-Disposition:inline;filename="'.$outputFileName.'"');
header("Content-Disposition: attachment;filename=商品销售点击数据报表.xls ");   
header("Content-Transfer-Encoding: binary");   
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");   
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");   
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");   
header("Pragma: no-cache"); 
$objWriter->save('php://output');

$_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言
$_SERVER['REMOTE_ADDR'] //当前用户 IP 。
$_SERVER['REMOTE_HOST'] //当前用户主机名
$_SERVER['REQUEST_URI'] //URL

$_SERVER['REMOTE_PORT'] //端口。
$_SERVER['SERVER_NAME'] //服务器主机的名称。
$_SERVER['PHP_SELF']//正在执行脚本的文件名
$_SERVER['argv'] //传递给该脚本的参数。
$_SERVER['argc'] //传递给程序的命令行参数的个数。
$_SERVER['GATEWAY_INTERFACE']//CGI 规范的版本。
$_SERVER['SERVER_SOFTWARE'] //服务器标识的字串
$_SERVER['SERVER_PROTOCOL'] //请求页面时通信协议的名称和版本
$_SERVER['REQUEST_METHOD']//访问页面时的请求方法
$_SERVER['QUERY_STRING'] //查询(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录
$_SERVER['HTTP_ACCEPT'] //当前请求的 Accept: 头部的内容。
$_SERVER['HTTP_ACCEPT_CHARSET'] //当前请求的 Accept-Charset: 头部的内容。
$_SERVER['HTTP_ACCEPT_ENCODING'] //当前请求的 Accept-Encoding: 头部的内容
$_SERVER['HTTP_CONNECTION'] //当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'] //当前请求的 Host: 头部的内容。
$_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] //当前请求的 User_Agent: 头部的内容。
$_SERVER['HTTPS']//如果通过https教程访问,则被设为一个非空的值(on),否则返回off
$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。
$_SERVER['SERVER_ADMIN'] #管理员信息
$_SERVER['SERVER_PORT'] #服务器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。
$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER['PHP_AUTH_USER'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER['PHP_AUTH_PW'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER['AUTH_TYPE'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型

我们利用了三种php发送邮件实例程序哦,下面一个个来实例各种发送的发送邮件哦。

if(send_mail('test@qq.com','邮件主题','邮件内容')==""){
echo "发送成功!<br>";
} else{
echo "发送失败!<br>";
}

<?php
$to = "test@test.com";
$subject = "Test Subject";
$message = "This is the test email.";
$from = "youremail@yourdomain.com";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
?>

 <?php
function send_mail($to, $subject = 'No subject', $body) {
$loc_host = "im286"; //发信计算机名,可随意
$smtp_acc = "test@126.com"; //Smtp认证的用户名
$smtp_pass="******"; //Smtp认证的密码,一般等同pop3密码
$smtp_host="smtp.126.com"; //SMTP服务器地址,类似 smtp.tom.com
$from="test@126.com"; //发信人Email地址,你的发信信箱地址
$headers = "Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64";
$lb=" "; //linebreak

$hdr=explode($lb,$headers); //解析后的hdr
if($body){$bdy = preg_replace("/^./","..",explode($lb,$body));}//解析后的Body

$smtp = array(
//1、EHLO,期待返回220或者250
array("EHLO ".$loc_host.$lb,"220,250","HELO error: "),
//2、发送Auth Login,期待返回334
array("AUTH LOGIN".$lb,"334","AUTH error:"),
//3、发送经过Base64编码的用户名,期待返回334
array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION error : "),
//4、发送经过Base64编码的密码,期待返回235
array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION error : "));
//5、发送Mail From,期待返回250
$smtp[] = array("MAIL FROM: <".$from.">".$lb,"250","MAIL FROM error: ");
//6、发送Rcpt To。期待返回250
$smtp[] = array("RCPT TO: <".$to.">".$lb,"250","RCPT TO error: ");
//7、发送DATA,期待返回354
$smtp[] = array("DATA".$lb,"354","DATA error: ");
//8.0、发送From
$smtp[] = array("From: ".$from.$lb,"","");
//8.2、发送To
$smtp[] = array("To: ".$to.$lb,"","");
//8.1、发送标题
$smtp[] = array("Subject: ".$subject.$lb,"","");
//8.3、发送其他Header内容
foreach($hdr as $h) {$smtp[] = array($h.$lb,"","");}
//8.4、发送一个空行,结束Header发送
$smtp[] = array($lb,"","");
//8.5、发送信件主体
if($bdy) {foreach($bdy as $b) {$smtp[] = array(base64_encode($b.$lb).$lb,"","");}}
//9、发送“.”表示信件结束,期待返回250
$smtp[] = array(".".$lb,"250","DATA(end)error: ");
//10、发送Quit,退出,期待返回221
$smtp[] = array("QUIT".$lb,"221","QUIT error: ");

//打开smtp服务器端口
$fp=@fsockopen($smtp_host, 25);
if(!$fp) echo "<b>Error:</b> Cannot conect to ".$smtp_host."<br>";
while($result = @fgets($fp, 1024)){if(substr($result,3,1) == " ") { break; }}

$result_str="";
//发送smtp数组中的命令/数据
foreach($smtp as $req){
//发送信息
@fputs($fp, $req[0]);
//如果需要接收服务器返回信息,则
if($req[1]){
//接收信息
while($result = @fgets($fp, 1024)){
if(substr($result,3,1) == " ") { break; }
};
if (!strstr($req[1],substr($result,0,3))){
$result_str.=$req[2].$result."<br>";
}
}
}
//关闭连接
@fclose($fp);
return $result_str;
}
?>

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Mybatis Plus select 实现只查询部分字段

    这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
  • antdesign-vue结合sortablejs实现两个table相互拖拽排序功能

    这篇文章主要介绍了antdesign-vue结合sortablejs实现两个table相互拖拽排序功能,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-09
  • 删除条目时弹出的确认对话框

    复制代码 代码如下: <td> <a href="/member/life/edit_ppt/<?php echo $v->id;?>" class="btn">编辑</a> <a href="javascript:;" onclick="if(confirm('您确定删除这条记录?')){location.href='/member/life/d...2014-06-07
  • MyBatisPlus-QueryWrapper多条件查询及修改方式

    这篇文章主要介绍了MyBatisPlus-QueryWrapper多条件查询及修改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-06-27
  • Oracle使用like查询时对下划线的处理方法

    这篇文章主要介绍了Oracle使用like查询时对下划线的处理方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-16
  • 解决mybatis-plus 查询耗时慢的问题

    这篇文章主要介绍了解决mybatis-plus 查询耗时慢的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-04
  • C# 参数按照ASCII码从小到大排序(字典序)

    这篇文章主要介绍了C# 参数按照ASCII码从小到大排序(字典序)的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php跨网站请求伪造与防止伪造方法

    伪造跨站请求介绍伪造跨站请求比较难以防范,而且危害巨大,攻击者可以通过这种方式恶作剧,发spam信息,删除数据等等。...2013-10-01
  • js实现列表按字母排序

    这篇文章主要为大家详细介绍了js实现列表按字母排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-11
  • Centos中彻底删除Mysql(rpm、yum安装的情况)

    我用的centos6,mysql让我整出了各种问题,我想重装一个全新的mysql,yum remove mysql-server mysql之后再install并不能得到一个干净的mysql,原来的/etc/my.cnf依然没变,datadir里面的数据已没有任何变化,手动删除/etc/my.cn...2015-03-15
  • MyBatis-Plus的物理删除和逻辑删除(使用场景)

    数据库中的数据删除会分为两种:物理删除 和 逻辑删除,接下来通过本文给大家介绍MyBatis-Plus的物理删除和逻辑删除使用场景分析,感兴趣的朋友一起看看吧...2021-09-25
  • jQuery动态添加与删除tr行实例代码

    最近由于项目的需要,需要动态的添加和删除table中的tr,感觉用JS可以实现,但是在网上找了一下,单纯的自己写JS,感觉太麻烦,而且也不好维护。于是想到了最近学的jQuery。这篇文章给大家用实例介绍了jQuery动态添加与删除tr行的方法,有需要的朋友们可以参考借鉴。...2016-10-20
  • MySQL中在查询结果集中得到记录行号的方法

    如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数。 Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的 ROWNUM ; MS SQL...2015-03-15
  • Node实现搜索框进行模糊查询

    这篇文章主要为大家详细介绍了Node实现搜索框进行模糊查询,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-06-28
  • Element-ui 自带的两种远程搜索(模糊查询)用法讲解

    这篇文章主要介绍了Element-ui 自带的两种远程搜索(模糊查询)用法讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-29
  • mybatis-plus getOne和逻辑删除问题详解

    这篇文章主要介绍了mybatis-plus getOne和逻辑删除,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-26
  • Mybatis用注解写in查询的实现

    这篇文章主要介绍了Mybatis用注解写in查询的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-13
  • PHP+Mysql+jQuery查询和列表框选择操作实例讲解

    本文讲解如何通过ajax查询mysql数据,并将返回的数据显示在待选列表中,再通过选择最终将选项加入到已选区,可以用在许多后台管理系统中。本文列表框的操作依赖jquery插件。HTML <form id="sel_form" action="post.php" me...2015-10-23
  • C#实现排序的代码详解

    在本篇文章里小编给大家整理的是关于C#实现排序的代码以及相关知识点,需要的朋友们参考下。...2020-06-25