王新阳

wangxinyang

Fatal error: Call-time pass-by-reference has been removed in...的处理方法

以前的php代码在升级到5.4版本的php可能会出现这种错误:
当我们这样使用函数(或者类)的话,会产生一个error:
foo(&$var);
实际上,这样用本来就是错的,只是之前的错误级别仅仅是Deprecated而已。
而正确的使用方法应该是在函数定义时:
function foo(& $var) {
    //other code
}
而在调用时直接传参就行了: foo($var);

PHP:Fatal error: Class 'COM' not found in … 的处理办法

一般执行3、4两条即可

1、首先在windows的“服务”里面检查COM+服务是否已经启动。如果未启动,请启动它。

大概是该服务:Windows Management Instrumentation

2、检查php目录ext文件夹下面php_com_dotnet.dll是否存在。(顺便说一下,ext通常作为php程序的扩展目录,在安装php的时候一般已经设置好。否则就应该不仅仅报主题所说的错咯。)

3、如果没问题,在php.ini里面加入以下语句:
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll

4、php.ini中设置
com.allow_dcom = true

5.PHP版本
PHP 5.4.5以前的版本,只需要在php.ini中把com.allow_dcom = true打开就可以了,但是5.4.5版本以后,PHP把com/dotnet 模块集成到了一个单独的扩展中,所以需要在php.ini中加一行扩展extension=php_com_dotnet.dll,是加一行,不是打开,默认配置文件中没有这一行的,然后重启IIS或Apache,再次运行就正常了!

CodeIgniter使用rewrite时出现404的原因

.htaccess中有如下一条,本意是要把/m重写为/m.php,结果总是 404错误

RewriteRule ^m/(.*)$ m.php/$1 [L]

原因:
config/config.php

$config['uri_protocol'] = 'REQUEST_URI';

要改为

$config['uri_protocol'[ = 'PATH_INFO';

否则CI无法根据重写后的uri获取请求的class和method,从而导致出错。
当访问地址为 http://abc.com/m   没有以 / 结尾时仍不能正确重写到 m.php,需要在.htaccess中增加如下一行(加在 RewriteRule ^m/(.*)$ m.php/$1 [L] 的前面):

RewriteRule ^m$ /m/ [R=301,NC,L]

参考:http://blog.csdn.net/newjueqi/article/details/12014673

如果服务器不支持$_SERVER['PATH_INFO'],可以在服务器上输入$_SERVER数组,查看是否支持$_SERVER['ORIG_PATH_INFO'],支持的话以ORIG_PATH_INFO代替PATH_INFO,当前要观察两个值是否相同,如果不相同,需要同时修改 system/core/URI.php 中关于$uri获取的部分。我本地电脑中ORIG_PATH_INFO和PATH_INFO的值不一样。阿里云虚拟主机不支持PATH_INFO,但ORIG_PATH_INFO的值却与我本地的PATH_INFO一样。

301转跳

ASP:

<%
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", new_url
%>

PHP:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://abc.com".$_SERVER['REQUEST_URI']);
?>

CI在模板中自由引用模板

<?php $this->load->view('模板'); ?>

为新模板赋额外值(同时在控制器中加载模板时传递的参数仍可在新模板中调用):
<?php $this->load->view('模板', array('newdata'=>参数值)); ?>

好处:灵活,不受制于controller

特殊问题:使用pathinfo时php网站总是显示首页

WIN10 IIS10  CodeIgniter框架开发个网站,本来好好的,换电脑后不管访问哪个页面,都指向首页,折腾一下午才找到原因:不支持pathinfo。

IIS“处理程序映射”中添加php支持时,要选择“添加模块映射“,而不是”添加脚本映射“。


CI的CSRF防范原理及注意事项

首先我们谈谈什么是CSRF,它就是Cross-Site Request Forgery跨站请求伪造的简称。很多开发者甚至不够重视这个问题,认为这不是安全漏洞,而不过是恶意访问而已,它的攻击原理我在这里简单地描述一下:

有一天你打开你简单优雅逼格十足的谷歌浏览器,首先打开了一个tab页,登录并访问了你的微博首页。我们这里假设weibo.cn有这样一个网址: http://www.weibo.cn?follow_uid=123 ,意思是关注id为123的一个用户。这是一个正常的地址,访问也没有问题。

紧接着你的QQ群里发来了一个让你感到好奇的链接,http://www.comeonbaby.com, 你禁不住诱惑打开了这个链接,并在浏览器里的另一个tab页里显示出来。紧接着,你打开你的微博tab页,发现无故关注了一个新的用户。咦,这是为何?

原因很简单,很可能在你打开的http://www.comeonbaby.com链 接里存在着这样一个html元素: <img src="http://www.weibo.cn?follow_uid=123" alt="">, 浏览器试图加载这个img,很显然加载失败了,因为它不是一个有效的图片格式。但是,这个请求依然被发送出去了,此时你的微博是登录状态中,然后,你就真 的follow了123, 你看,你被强奸了。

这就是简单的csrf攻击。

在实际的网站项目中,如: http://www.abc.com/logout之类的链接都应该注意,注销类的、删除内容类的、转账类的都可能中埋伏,轻则让你感到诧异,重则数据丢失,财产损失,所以要重视任何一个对数据有操作行为的url。

那么我们在CI里如何解决呢?简单地:
第一步: 在application/config/config.php里配置以下字段:
$config['csrf_protection'] = true;
$config['csrf_token_name'] = 'csrf_token_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
第二步: 在form里使用form_open(),帮助生成一个token。

接下来我说一下csrf的工作原理:
简单地来说,当我们访问一个页面如: http://www.abc.com/register时, CI会生成一个名为csrf_cookie_name的cookie,其值为hash,并发送到客户端。同时由于你在该页面里使用了 form_open(),会在form标签下生成一个之类的隐藏字段,其值也为hash。
紧接着用户点击了注册按钮,浏览器将这些数据包括csrf_token_name发送到(post到)服务器,同时也会将名为 csrf_cookie_nam的cookie发送回去。服务器会比较csrf_token_name的值(也就是hash) 与 csrf_cookie_name 的cookie值(同样也是hash)是否相同, 如果相同则通过,如果不同则说明是csrf攻击。


点击查看全文:http://www.ifixedbug.com/posts/codeigniter-csrf-story

CodeIgniter数据库操作常用函数

选择数据
$this->db->select();
允许你在SQL查询中写 SELECT 部分。
$this->db->where();
$this->db->or_where();
$this->db->where_in();
允许你在SQL查询中写 WHERE部分,其余各种where语句请看手册。
$this->db->get();
运行选择查询语句并且返回结果集。可以获取一个表的全部数据。
$this->db->like();
$this->db->or_like();
$this->db->not_like();
本函数允许你生成 LIKE 子句,在做查询时非常有用,其余语法请看手册。
$this->db->order_by();
帮助你设置一个 ORDER BY 子句。
$this->db->group_by();
允许你编写查询语句中的 GROUP BY 部分:
$this->db->distinct();
为查询语句添加 "DISTINCT" 关键字:
$this->db->having();
允许你为你的查询语句编写 HAVING 部分。
$this->db->limit();
限制查询所返回的结果数量:
$this->db->select_max();
为你的查询编写一个 "SELECT MAX(field)"。
$this->db->select_min();
为你的查询编写一个 "SELECT MIN(field)" 。
$this->db->select_avg();
为你的查询编写一个 "SELECT AVG(field)" 。
$this->db->select_sum();
为你的查询编写一个 "SELECT SUM(field)" 。
$this->db->join();
允许你编写查询中的JOIN部分。
$this->db->count_all_results();
允许你获得某个特定的Active Record查询所返回的结果数量。可以使用Active Record限制函数,例如 where(), or_where(), like(), or_like() 等等。

插入数据

$this->db->insert();
生成一条基于你所提供的数据的SQL插入字符串并执行查询。你可以向函数传递 数组 或一个 对象。
$this->db->insert_batch();
一次插入多条数据,生成一条基于你所提供的数据的SQL插入字符串并执行查询。你可以向函数传递 数组 或一个 对象。
$this->db->set();
本函数使您能够设置inserts(插入)或updates(更新)值。它可以用来代替那种直接传递数组给插入和更新函数的方式。

更新数据

$this->db->update();
根据你提供的数据生成并执行一条update(更新)语句。你可以将一个数组或者对象传递给本函数。
$this->db->update_batch();
Generates an update string based on the data you supply, and runs the query. You can either pass an array or an object to the function. Here is an example using an array:

删除数据

$this->db->delete();
生成并执行一条DELETE(删除)语句。
$this->db->empty_table();
生成并执行一条DELETE(删除)语句。
$this->db->truncate();
生成并执行一条TRUNCATE(截断)语句。

链式方法

链式方法允许你以连接多个函数的方式简化你的语法。考虑一下这个范例:
$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20); 
$query = $this->db->get(); 
说明: 链式方法只能在PHP 5下面运行。

查询

$this->db->query(); 
要提交一个查询,用以下函数: 
$this->db->query('YOUR QUERY HERE'); 
query() 函数以object(对象)的形式返回一个数据库结果集。 当使用 "read" 模式来运行查询时, 你可以使用"显示你的结果集"来显示查询结果; 当使用 "write" 模式来运行查询时, 将会仅根据执行的成功或失败来返回 TRUE 或 FALSE. 

转义查询

$this->db->escape()这个函数将会确定数据类型,以便仅对字符串类型数据进行转义。并且,它也会自动把数据用单引号括起来,所以你不必手动添加单引号,用法如下:  $sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";

查询辅助函数

$this->db->insert_id()
这个ID号是执行数据插入时的ID。
$this->db->affected_rows() 
当执行写入操作(insert,update等)的查询后,显示被影响的行数。 
$this->db->count_all(); 
计算出指定表的总行数并返回。在第一个参数中写入被提交的表名。

生成查询记录集

result() 
该方法执行成功返回一个object 数组,失败则返回一个空数组。 

result_array() 
该方法执行成功时将记录集作为关联数组返回。失败时返回空数组。 
row() 
该函数将当前请求的第一行数据作为 object 返回。你可以传递参数(参数是行的索引)以便获得某一行的数据。比如我们要获得第 5 行的数据: $row = $query->row(4);
row_array() 
功能与 row() 一样, 区别在于该函数返回的是一个数组。 

除此以外, 我们还可以使用下面的方法通过游标的方式获取记录: 
$row = $query->first_row() 
$row = $query->last_row() 
$row = $query->next_row() 
$row = $query->previous_row() 
默认情况下他们将返回一个 object,同时你也可以传递参数 "array" 以便使用 array 的方式获取数据 $row = $query->first_row('array') 
$row = $query->last_row('array') 
$row = $query->next_row('array') 
$row = $query->previous_row('array')

结果集辅助函数

$query->num_rows() 
该函数将会返回当前请求的行数。 

$query->num_fields() 
该函数返回当前请求的字段数(列数): 
$query->free_result() 

该函数将会释放当前查询所占用的内存并删除其关联的资源标识。

自动连接

"自动连接" 功能将在每个一页面加载时被自动实例化数据库类。要启用"自动连接",可在application/config/autoload.php中的 library 数组里添加 database: 
$autoload['libraries'] = array('database');

手动连接

如果仅仅是一部分页面要求数据库连接,你可以在你有需要的函数里手工添加如下代码或者在你的类里手工添加以供该类使用。 
$this->load->database();

连接多数据库

如果你需要同时连接多于一个的数据库,你可以用以下方式来实现: 
$DB1 = $this->load->database('group_one', TRUE); 
$DB2 = $this->load->database('group_two', TRUE);

表数据

$this->db->list_tables(); 
返回一个包含当前连接数据库中所有表名称的数组。 
$this->db->table_exists(); 
有时,在对某个表执行操作之前,使用该函数判断指定表是否存在很有用。返回一个布尔值。

数据库工具类

重要提示:  初始化数据库工具类之前,你的数据库驱动必须已经运行,因为工具类依赖于此。 

加载工具类: $this->load->dbutil() 
一旦初始化完毕,你可以通过 $this->dbutil 对象来访问成员函数: 
$this->dbutil->list_databases() 
$this->dbutil->database_exists(); 
$this->dbutil->xml_from_result($db_result) 
$this->dbutil->backup()

数据库缓存类激活缓存需要三步: 

1、在服务器上创建一个可写的目录以便保存缓存文件。 
2、在文件 application/config/database.php 中$db['xxxx']['cachedir']设置其目录。 
3、激活缓存特性,可以在文件 application/config/database.php 中设置全局选项$db['xxxx']['cache_on']='TRUE',也可以用以本页下面的方法手动设置。
一旦被激活,每一次含有数据库查询的页面被加载时缓存就会自动发生。

当有数据库更新,我们需要删除缓存文件 

$this->db->cache_delete() 

选择数据

$this->db->select();
允许你在SQL查询中写 SELECT 部分。
$this->db->where();
$this->db->or_where();
$this->db->where_in();
允许你在SQL查询中写 WHERE部分,其余各种where语句请看手册。
$this->db->get();
运行选择查询语句并且返回结果集。可以获取一个表的全部数据。
$this->db->like();
$this->db->or_like();
$this->db->not_like();
本函数允许你生成 LIKE 子句,在做查询时非常有用,其余语法请看手册。
$this->db->order_by();
帮助你设置一个 ORDER BY 子句。
$this->db->group_by();
允许你编写查询语句中的 GROUP BY 部分:
$this->db->distinct();
为查询语句添加 "DISTINCT" 关键字:
$this->db->having();
允许你为你的查询语句编写 HAVING 部分。
$this->db->limit();
限制查询所返回的结果数量:
$this->db->select_max();
为你的查询编写一个 "SELECT MAX(field)"。
$this->db->select_min();
为你的查询编写一个 "SELECT MIN(field)" 。
$this->db->select_avg();
为你的查询编写一个 "SELECT AVG(field)" 。
$this->db->select_sum();
为你的查询编写一个 "SELECT SUM(field)" 。
$this->db->join();
允许你编写查询中的JOIN部分。
$this->db->count_all_results();
允许你获得某个特定的Active Record查询所返回的结果数量。可以使用Active Record限制函数,例如 where(), or_where(), like(), or_like() 等等。

插入数据

$this->db->insert();
生成一条基于你所提供的数据的SQL插入字符串并执行查询。你可以向函数传递 数组 或一个 对象。
$this->db->insert_batch();
一次插入多条数据,生成一条基于你所提供的数据的SQL插入字符串并执行查询。你可以向函数传递 数组 或一个 对象。
$this->db->set();
本函数使您能够设置inserts(插入)或updates(更新)值。它可以用来代替那种直接传递数组给插入和更新函数的方式。

更新数据

$this->db->update();

根据你提供的数据生成并执行一条update(更新)语句。你可以将一个数组或者对象传递给本函数。
$this->db->update_batch();

Generates an update string based on the data you supply, and runs the query. You can either pass an array or an object to the function. Here is an example using an array:

删除数据

$this->db->delete();
生成并执行一条DELETE(删除)语句。
$this->db->empty_table();
生成并执行一条DELETE(删除)语句。
$this->db->truncate();
生成并执行一条TRUNCATE(截断)语句。

链式方法

链式方法允许你以连接多个函数的方式简化你的语法。考虑一下这个范例:

$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20); 
$query = $this->db->get(); 

说明: 链式方法只能在PHP 5下面运行。

查询

$this->db->query(); 

要提交一个查询,用以下函数: 
$this->db->query('YOUR QUERY HERE'); 

query() 
函数以object(对象)的形式返回一个数据库结果集。 当使用 "read" 模式来运行查询时, 你可以使用"显示你的结果集"来显示查询结果; 当使用 "write" 模式来运行查询时, 将会仅根据执行的成功或失败来返回 TRUE 或 FALSE. 

转义查询

$this->db->escape()

这个函数将会确定数据类型,以便仅对字符串类型数据进行转义。并且,它也会自动把数据用单引号括起来,所以你不必手动添加单引号,用法如下:  $sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";

查询辅助函数

$this->db->insert_id()
这个ID号是执行数据插入时的ID。  

$this->db->affected_rows() 
当执行写入操作(insert,update等)的查询后,显示被影响的行数。 
$this->db->count_all(); 
计算出指定表的总行数并返回。在第一个参数中写入被提交的表名。

生成查询记录集

result() 
该方法执行成功返回一个object 数组,失败则返回一个空数组。 

result_array() 
该方法执行成功时将记录集作为关联数组返回。失败时返回空数组。 
row() 
该函数将当前请求的第一行数据作为 object 返回。你可以传递参数(参数是行的索引)以便获得某一行的数据。比如我们要获得第 5 行的数据: $row = $query->row(4);
row_array() 
功能与 row() 一样, 区别在于该函数返回的是一个数组。 

除此以外, 我们还可以使用下面的方法通过游标的方式获取记录: 
$row = $query->first_row() 
$row = $query->last_row() 
$row = $query->next_row() 
$row = $query->previous_row() 
默认情况下他们将返回一个 object,同时你也可以传递参数 "array" 以便使用 array 的方式获取数据 $row = $query->first_row('array') 
$row = $query->last_row('array') 
$row = $query->next_row('array') 
$row = $query->previous_row('array')

结果集辅助函数

$query->num_rows() 

该函数将会返回当前请求的行数。 
$query->num_fields() 
该函数返回当前请求的字段数(列数): 
$query->free_result() 
该函数将会释放当前查询所占用的内存并删除其关联的资源标识。

自动连接

"自动连接" 功能将在每个一页面加载时被自动实例化数据库类。要启用"自动连接",可在application/config/autoload.php中的 library 数组里添加 database: 

$autoload['libraries'] = array('database');

手动连接

如果仅仅是一部分页面要求数据库连接,你可以在你有需要的函数里手工添加如下代码或者在你的类里手工添加以供该类使用。 
$this->load->database();

连接多数据库

如果你需要同时连接多于一个的数据库,你可以用以下方式来实现: 
$DB1 = $this->load->database('group_one', TRUE); 
$DB2 = $this->load->database('group_two', TRUE);

表数据

$this->db->list_tables(); 
返回一个包含当前连接数据库中所有表名称的数组。 
$this->db->table_exists(); 
有时,在对某个表执行操作之前,使用该函数判断指定表是否存在很有用。返回一个布尔值。

数据库工具类

重要提示:  初始化数据库工具类之前,你的数据库驱动必须已经运行,因为工具类依赖于此。 

加载工具类: $this->load->dbutil() 
一旦初始化完毕,你可以通过 $this->dbutil 对象来访问成员函数: 
$this->dbutil->list_databases() 
$this->dbutil->database_exists(); 
$this->dbutil->xml_from_result($db_result) 
$this->dbutil->backup()

数据库缓存类

激活缓存需要三步: 

1、在服务器上创建一个可写的目录以便保存缓存文件。 
2、在文件 application/config/database.php 中$db['xxxx']['cachedir']设置其目录。 
3、激活缓存特性,可以在文件 application/config/database.php 中设置全局选项$db['xxxx']['cache_on']='TRUE',也可以用以本页下面的方法手动设置。
一旦被激活,每一次含有数据库查询的页面被加载时缓存就会自动发生。

当有数据库更新,我们需要删除缓存文件 

$this->db->cache_delete() 
删除缓存文件与特定网页。如果你需要清除缓存后,更新您的数据库 
$this->db->cache_delete('/blog', 'comments'); 
注意,手册上写的是 $this->db->cache_delete('blog', 'comments');但根据实际测试应该在控制器名字前加斜杠'/'才能正确执行。 
$this->db->cache_delete_all() 
清除所有所有的缓存文件。

数据库维护类

注意:  欲初始化数据库维护类,请确保你的数据库驱动已经运行,因为该类依赖于数据库驱动。 
使用如下方法载入数据库维护类: 
$this->load->dbforge() 
一旦初始化,就可以使用$this->dbforge 对象访问类中函数: 
$this->dbforge->create_database('db_name') 
允许你创建由第一个参数指定的数据库。 
$this->dbforge->drop_database('db_name') 
允许你删除由第一个参数指定的数据库。 
$this->dbforge->create_table('table_name'); 
声明了字段和键之后,你就可以创建一个表。  删除缓存文件与特定网页。如果你需要清除缓存后,更新您的数据库 
$this->db->cache_delete('/blog', 'comments'); 
注意,手册上写的是 $this->db->cache_delete('blog', 'comments');但根据实际测试应该在控制器名字前加斜杠'/'才能正确执行。 
$this->db->cache_delete_all() 
清除所有所有的缓存文件。

数据库维护类

注意:  欲初始化数据库维护类,请确保你的数据库驱动已经运行,因为该类依赖于数据库驱动。 
使用如下方法载入数据库维护类: 
$this->load->dbforge() 
一旦初始化,就可以使用$this->dbforge 对象访问类中函数: 
$this->dbforge->create_database('db_name') 
允许你创建由第一个参数指定的数据库。 
$this->dbforge->drop_database('db_name') 
允许你删除由第一个参数指定的数据库。 
$this->dbforge->create_table('table_name'); 
声明了字段和键之后,你就可以创建一个表。  

PHP十六进制和RGB颜色互换

两个函数均未进行数据合法性验证:
十六进制颜色 preg_match('/^#([0-9a-f]{3}|[0-9a-f]{6})$/i', $hex)===1
RGB三个值均大于等于0小于等于255

function hex2rgb($hex) {
	$hex = str_replace("#", "", $hex);
	if(strlen($hex) == 3){
		$r = hexdec(substr($hex,0,1).substr($hex,0,1));
		$g = hexdec(substr($hex,1,1).substr($hex,1,1));
		$b = hexdec(substr($hex,2,1).substr($hex,2,1));
	}else{
		$r = hexdec(substr($hex,0,2));
		$g = hexdec(substr($hex,2,2));
		$b = hexdec(substr($hex,4,2));
	}
	return array($r, $g, $b);
}


function rgb2hex($rgb) {
	if(!is_array($rgb)) $rgb=explode(',', $rgb);
	$hex = "#";
	$hex .= str_pad(dechex((int)$rgb[0]), 2, "0", STR_PAD_LEFT);
	$hex .= str_pad(dechex((int)$rgb[1]), 2, "0", STR_PAD_LEFT);
	$hex .= str_pad(dechex((int)$rgb[2]), 2, "0", STR_PAD_LEFT);
	return $hex; 
}

PHP数组函数

  • array_change_key_case — 返回字符串键名全为小写或大写的数组
  • array_chunk — 将一个数组分割成多个
  • array_column — 返回数组中指定的一列
  • array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
  • array_count_values — 统计数组中所有的值出现的次数
  • array_diff_assoc — 带索引检查计算数组的差集
  • array_diff_key — 使用键名比较计算数组的差集
  • array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集
  • array_diff_ukey — 用回调函数对键名比较计算数组的差集
  • array_diff — 计算数组的差集
  • array_fill_keys — 使用指定的键和值填充数组
  • array_fill — 用给定的值填充数组
  • array_filter — 用回调函数过滤数组中的单元
  • array_flip — 交换数组中的键和值
  • array_intersect_assoc — 带索引检查计算数组的交集
  • array_intersect_key — 使用键名比较计算数组的交集
  • array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引
  • array_intersect_ukey — 用回调函数比较键名来计算数组的交集
  • array_intersect — 计算数组的交集
  • array_key_exists — 检查给定的键名或索引是否存在于数组中
  • array_keys — 返回数组中部分的或所有的键名
  • array_map — 将回调函数作用到给定数组的单元上
  • array_merge_recursive — 递归地合并一个或多个数组
  • array_merge — 合并一个或多个数组
  • array_multisort — 对多个数组或多维数组进行排序
  • array_pad — 用值将数组填补到指定长度
  • array_pop — 将数组最后一个单元弹出(出栈)
  • array_product — 计算数组中所有值的乘积
  • array_push — 将一个或多个单元压入数组的末尾(入栈)
  • array_rand — 从数组中随机取出一个或多个单元
  • array_reduce — 用回调函数迭代地将数组简化为单一的值
  • array_replace_recursive — 使用传递的数组递归替换第一个数组的元素
  • array_replace — 使用传递的数组替换第一个数组的元素
  • array_reverse — 返回一个单元顺序相反的数组
  • array_search — 在数组中搜索给定的值,如果成功则返回相应的键名
  • array_shift — 将数组开头的单元移出数组
  • array_slice — 从数组中取出一段
  • array_splice — 把数组中的一部分去掉并用其它值取代
  • array_sum — 计算数组中所有值的和
  • array_udiff_assoc — 带索引检查计算数组的差集,用回调函数比较数据
  • array_udiff_uassoc — 带索引检查计算数组的差集,用回调函数比较数据和索引
  • array_udiff — 用回调函数比较数据来计算数组的差集
  • array_uintersect_assoc — 带索引检查计算数组的交集,用回调函数比较数据
  • array_uintersect_uassoc — 带索引检查计算数组的交集,用回调函数比较数据和索引
  • array_uintersect — 计算数组的交集,用回调函数比较数据
  • array_unique — 移除数组中重复的值
  • array_unshift — 在数组开头插入一个或多个单元
  • array_values — 返回数组中所有的值
  • array_walk_recursive — 对数组中的每个成员递归地应用用户函数
  • array_walk — 使用用户自定义函数对数组中的每个元素做回调处理
  • array — 新建一个数组
  • arsort — 对数组进行逆向排序并保持索引关系
  • asort — 对数组进行排序并保持索引关系
  • compact — 建立一个数组,包括变量名和它们的值
  • count — 计算数组中的单元数目或对象中的属性个数
  • current — 返回数组中的当前单元
  • each — 返回数组中当前的键/值对并将数组指针向前移动一步
  • end — 将数组的内部指针指向最后一个单元
  • extract — 从数组中将变量导入到当前的符号表
  • in_array — 检查数组中是否存在某个值
  • key_exists — 别名 array_key_exists
  • key — 从关联数组中取得键名
  • krsort — 对数组按照键名逆向排序
  • ksort — 对数组按照键名排序
  • list — 把数组中的值赋给一些变量
  • natcasesort — 用"自然排序"算法对数组进行不区分大小写字母的排序
  • natsort — 用"自然排序"算法对数组排序
  • next — 将数组中的内部指针向前移动一位
  • pos — current 的别名
  • prev — 将数组的内部指针倒回一位
  • range — 建立一个包含指定范围单元的数组
  • reset — 将数组的内部指针指向第一个单元
  • rsort — 对数组逆向排序
  • shuffle — 将数组打乱
  • sizeof — count 的别名
  • sort — 对数组排序
  • uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
  • uksort — 使用用户自定义的比较函数对数组中的键名进行排序
  • usort — 使用用户自定义的比较函数对数组中的值进行排序
2024-05-10 星期五 农历四月初三