php array数组的相关处理函数and str字符串处理与正则表达式

 更新时间:2016年11月25日 15:42  点击:1826
下面给各位同学整理了一些关于php array数组的相关处理函数and str字符串处理与正则表达式,希望文章对你会有所帮助。

数组的相关处理函数:

1)数组的键值操作函数
 
array_values();//获取数组中的值
array_keys();//获取数组中的键
in_array();//检查一个值是否在数组中
array_key_exists();//检查一个键是否在数组中
array_flip();//键和值对调
array_reverse();//数组中的值反转

2)统计数组的元素和唯一性

count();//统计数组的个数
array_count_values();//统计数组中值出现的次数
array_unique();//删除数组中重复值

3)使用回调函数处理数组的函数
 
array_filter();//数组值过滤
array_map();//将回调函数作用到给定数组的单元上

4)数组的排序函数

 
sort();
//按值把数组值进行排序,升序,不保留key
rsort();
//按值把数组值进行排序,降序,不保留key
 
asort();
//按值把数组值进行排序,升序,保留key
arsort();
//按值把数组值进行排序,降序,保留key
 
ksort();
//按键把数组值进行排序,升序,保留key
krsort();
//按键把数组值进行排序,降序,保留key
 
natsort();
//按自然数排序
natcasesort();
//忽略大小写的自然数排序
 
array_multisort();//用一个数组对另外一个数组进行排序
SORT_DESC倒序
SORT_ASC正序  array_multisort($arr2,SORT_DESC,$arr);

5)拆分、合并、分解与结合函数

 
array_slice();//截取一段值 $arr2=array_slice($arr,0,3); 0开始位置,3个 ,返回值:截取的内容
 
array_splice();//截取一段值,保留一段值  
 
返回值:截取后剩下的内容  //array_splice(3,3,"aa"); 从下标3的位置开始向后截取3个值,aa替换截取的内容
 
array_combine();//合并,一个是key,一个是value eg: $arr3=array_combine($arr1,$arr2); $arr1为key值 ,$arr2为值
 
array_merge();  并集  //合并,键值相同,后面覆盖前面 返回一个新数组 $arr3=array_merge($arr1,$arr2);
 
array_intersect();//交集
 
array_diff();//差集
 
implode();//把数组连接成字符串  eg: $str=implode("|" ,$arr);  | 分割符
  
explode();//把字符串分解成数组   eg: $arr=explode('|',$str);


6)数组与数据结构

 
array_pop();//从最后弹出一个值,返回弹出值 //unset($arr[count($arr)-1]);
array_push(); array_push($arr,6);//从最后添加一个值,返回数组个数
//$arr[]="aa";
array_shift();//从前面弹出一个值,返回移出值,原数组下标重排
//unset($arr[0]); 原数组下标不重排
array_unshift();//从前面插入一个值,返回数组个数

7)其他有用的数组处理函数

 
array_rand();//随机取一个key
 
shuffle();//打乱数组
 
array_sum();//数组所有值的和
 
range();//获取一个范围内数组
//range(1,10); 返回数组 array(1,2,3,...,10);
//range(1,10,2); array(1,3,5,7,9);  2代表差值;默认是0不写

字符串处理与正则表达式
————————————————

1.字符串的处理介绍
2.常用的字符串输出函数
3.常用的字符串格式化函数
4.字符串比较函数
5.正则表达式在字符串中的应用
6.与perl兼容的正则表达式函数

字符串的输出:

 
1)echo "hello world www.111cn.net";
2)print "aaaa";
3)die("输出一条错误消息");
4)printf("--%s----%s--",$a,$b);
%s  字符串
%d  数字
%f  浮点型   //%.2f   小数点后面两位
5)sprintf("$s%s",$a,$b);
不直接输出,而是返回值给一个新的变量

常用的字符串格式化函数:
1.去除空格和字符串填补函数
 
ltrim() //去左边空格
rtrim() //去右边空格;
trim()  //去掉两头空格  $str='abc'; trim($str,'b'); echo $str ; 结果 :ac; 可以删除指定的字符串
str_pad() //向字符串里添加空格或字符串
 
<?php
$input = "Alien";
echo str_pad($input, 10);  // 输出 "Alien "
echo str_pad($input, 10, "-=", STR_PAD_LEFT);  // 输出 "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH);   // 输出 "__Alien___"
echo str_pad($input, 6 , "___");   // 输出 "Alien_"
?>

2.字符串大小写转换函数

 
strtolower()
strtoupper()
ucfirst()
ucwords()

3.与html标签相关联的字符串函数

 
nl2br()
htmlspecialchars()
strip_tags()
addslashes()
stripslashes()

4.其他字符串格式化函数

 
strrev()
strlen()//返回字符串的长度
number_format()
md5()   //单向不可逆加密
str_shuffle()  //随机输出字符串

字符串比较函数:
1.按字节进行字符串的比较
1
 
strcmp($str1,$str2) //比较字符串的每个字节
 
strcasecmp()//忽略大小写比较字符串的每个字节

2.按自然排序法时字符串的比较

 
strnatcmp();
//按自然排序比较字符串中的数字

字符串的分割与拼接:
1.分割
 
//把字符串分割成数组
explode()
preg_split('//',$str);

2.拼接
//把数组拼接成字符串

 
implode()
join()  //等于implode();

字符串的截取:

 
substr()

字符串的查找:
 
strstr()//查找指定字符在字符串中的第一次出现
 
 
strrchr()//查找指定字符在字符串中的最后一次出现
 
 
strpos()//w在$str中第一次出现的位置
strrpos($str,'w')//w在$str中最后一次出现的位置

字符串的替换:
1
 
str_replace()

支持多字节文字

 
mb_substr($str,0,7,"utf-8");
mb_strpos();
mb_strrpos();
mb_strstr();
mb_strtoupper();
mb_strtolower();

正则表达式在字符串中的应用:
一.正则表达式介绍
正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割,匹配,查找及替换操作,在php在正则表

达式一般是由正规字符和一些特殊字符联合构成的一个文本模式的程序性描述,这在儿我们使用perl兼容正则表达式
二.正则表达式语法
1.原子 www.111cn.net
1)单个字符,数字
a-z,A-Z,0-9   a-z其中任意一个字符
2)模式单元
(abc) 匹配abc并且成一个单元
3)原子表
[abc]它中的任意一个字符a或b或c
4)重新使用的模式单元
\1,$1
5)普通转义字符
d,D,w,W,s,S
d 匹配一个数字
D 匹配一个非数字
w 匹配字母,数字,下划线
W 除了字母,数字,下划线
s 匹配空白字符,空格,tab
S 除了空白字符,空格,tab
6)转义元字符
*,. []
2.元字符
*,+,?,|,^,$,b,B,[],[^],{m},{m,n},{m,},(),.
d* 一个或多个或0个数字
d+ 一个或多个数字
d? 一个或0个数字
.  任意一个字符
3.模式修正符
i,m,s,U,e
i  忽略大小写
m  视为多行
s  视为一行
U  贪婪模式,最大模式
e  替换的时候用的,可以用函数加工向后引用\1,$1
三.字符串正则表达式函数
1.字符串的匹配与查找
preg_match()
preg_match_all()
preg_grep()
2.字符串的替换
preg_replace()
//问题:正则e修饰符<>
3.字符串的分割与连接
preg_split()
4.正则表达式的web验证应用
1)电子邮件地址
2)url地址
3)电话号码
 
 
ubb编辑器:
 
[url][/url][b]文字[/b]

下面我来给各位分享一个php中数组编码转换例子,这里用到了iconv函数,但对于数组我们要加以eval操作才行,下面看例子。

 场景说明/问题描述:

Ajax提交页面编码为gb2312,数据库编码为utf8,在不更改页面及数据库编码的情况下插入数据。

自定义函数:

 代码如下 复制代码
function array_iconv($in_charset,$out_charset,$arr){   
        return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));   

函数说明:
var_export设置第二个参数为true,返回数组原型字符串,将字符串转换为utf-8编码,之后再用eval来执行返回。

范例:

 代码如下 复制代码
 $postdata = $_POST;
$data = array_iconv('gb2312','utf-8',$postdata)
print_r($data);

借助Firefox firebug组件我们可以看到:

php数组编码转换函数的示例

再看下数据库:

 

php数组编码转换函数的示例

可以看到编码已经正常且入库成功

在php中为我们提供了大量全局变量了我们可以利用它们来帮我们直接获取文件或目录的路么了,下面我找到一篇比较全面的文章加以整理,希望对大家会有帮助。

PHP获取目录和的方法通过魔术变量;通过超级全局变量;通过相关函数等等:

 代码如下 复制代码


<?php
/**
 * PHP获取路径或目录实现
 * @link http://www.111cn.net
 */
 
//魔术变量,获取当前文件的绝对路径
echo "__FILE__:  ========>  ".__FILE__; 
echo '<br/>';
 
//魔术变量,获取当前脚本的目录
echo "__DIR__:  ========>  ".__DIR__;
echo '<br/>';
 
//dirname返回路径的目录部分,dirname(__FILE__)相当于__DIR__
echo "dirname(__FILE__):  ========>  ".dirname(__FILE__);
echo '<br/>';
 
//$_SERVER['PHP_SELF']和$_SERVER['SCRIPT_NAME']的结果一般相同,他们都是获取当前脚本的文件名
//只有当php以cgi方式运行时有区别,但是现在几乎找不到以cgi方式运行php了
echo '$_SERVER["PHP_SELF"]:  ========>  '.$_SERVER['PHP_SELF'];
echo '<br/>';
 
echo '$_SERVER["SCRIPT_NAME"]:  ========>  '.$_SERVER['SCRIPT_NAME'];
echo '<br/>';
 
//当前执行脚本的绝对路径。记住,在CLI方式运行php是获取不到的
echo '$_SERVER["SCRIPT_FILENAME"]:  ========>  '.$_SERVER['SCRIPT_FILENAME'];
echo '<br/>';
 
//当前运行脚本所在的文档根目录。在服务器配置文件中定义。
echo '$_SERVER["DOCUMENT_ROOT"]:  ========>  '.$_SERVER['DOCUMENT_ROOT'];
echo '<br>';
 
//getcwd()返回当前工作目录
echo "getcwd():  ========>  ".getcwd();
echo '<br>';
 
echo '<br>';
echo "php教程(www.111cn.net)整理";


(注意: $HTTP_SERVER_VARS 和 $_SERVER 是不同的变量,PHP 处理它们的方式不同。)如果设置了 register_globals 指令,这些变量也在所有脚本中可用;也就是,分离了 $_SERVER 和 $HTTP_SERVER_VARS 数组。
 
$_SERVER['HTTP_HOST'] 取得当前请求的Host:头部内容
$_SERVER['PHP_SELF']这可能是我们最为经常用到的了,它返回当前调用 的页的文件名,如果是http://localhost/test/2005/test.php, 那么将会返回/test/2005/test.php
$_SERVER['SCRIPT_NAME']它将返回包含当前脚本的路径。这在页面需要指向自己时非常有用
$_SERVER['SCRIPT_FILENAME']它将返回当前文件所在的绝对路径信息
$_SERVER['REQUEST_URI']返回访问此页面所需的URI,包括"/"

当然还有许多路径函数:
dirname(),返回路径信息中的目录部分,前面是带有"/"的
basename()返回路径中的基本的文件名部分,当然也可以设置后缀来控制输出。
realpath(),返回路径信息的绝对规范化的路径

下面给大家提供一个json递归解析类了,希望此例子对各位同学会带来帮助哦,其它费话也不说多了直接上代码
 代码如下 复制代码

<?php
/*
 * @ anthor:QD
 * @ time:  2013-09-27
 */
class json{
 
 private $Arr = array(); //传入数组
 
 //构造器
 public function json($array)
 {
  if(!is_array($array)) return false;
  $this->Arr = $array;
 }
 //解析主函数
 public function MainArr()
 {
  $arr = $this->Arr;
  if($this->TypeArr($arr))
  {
   $json = $this->NumArr($arr);
  }
  else
  {
   $json = $this->IndexArr($arr);
  }
  return $json;
 
 }
 //解析索引数组
 public function IndexArr($arr)
 {
  $str ="";
  foreach($arr as $k=>$value)
  {
   if(is_array($value))
   {
    if($this->TypeArr($value)) { $sun=$this->NumArr($value);}
    else               {$sun=$this->IndexArr($value);}
    if(strpos($sun,"}") || strpos($sun,"]"))
    {
     $str .= """.$k."":".$sun.",";
    }
    else
    {
     $str .= """.$k."":"".$sun."",";
    }
   }
   else
   {
     $str .= """.$k."":"".$value."",";
   }
  }
  $str = "{".trim($str,",")."}";
  return $str;
 }
 //解析数字数组
 public function NumArr($arr)
 {
  $str = "";
  foreach($arr as $value)
  {
   if(is_array($value))
   {
    if($this->TypeArr($value)) { $sun=$this->NumArr($value);}
    else               {$sun=$this->IndexArr($value);}
    if(strpos($sun,"}") || strpos($sun,"]"))
    {
     $str .= $sun.",";
    }
    else
    {
     $str .= """.$sun."",";
    }
   }
   else
   {
    $str .= """.$value."",";
   }
  }
  $str = "[".trim($str,",")."]";
  return $str;
 }
 //检验一个数组是不是严格数字索引  
 public function TypeArr($arr)
 {
  if(array_values($arr) === $arr) return true;
  return false;
 }
 
}
?>
在php学习中error_reporting和display_errors是两个非常重要的参数,我们在学习调试过程中是少不了它们的,开启与关闭这两个错误日志非常的简单只要在php.ini简单处理即可,下文会有介绍。

我们知道产品的生产环境肯定是不给予显示错误的,于是:
php.ini中将 display_errors = Off 改为display_errors = On
或者 ini_set('display_errors',0);

其次,我们知道php的错误级别是由error_reporting【error_reporting详细教程】控制的,但是有很多人在生产环境关闭了错误信息提示
error_reporting(0);

其实这种做法,我觉得不科学,在codeigniter框架就是这样

 代码如下 复制代码

if (defined('ENVIRONMENT'))
{
 switch (ENVIRONMENT)
 {
  case 'development':
   error_reporting(E_ALL);
  break;
 
  case 'testing':
  case 'production':
   error_reporting(0);
  break;
 
  default:
   exit('The application environment is not set correctly.');
 }
}

线上的错误信息肯定是要记录的,error_reporting(0)这样会导致所有的错误信息不会记录,应该:error_reporting = E_ALL & ~E_NOTICE,只要display_errors = Off,错误信息就不会再页面上显示,因为display_errors的优先级别更高。

特别要注意的是:
如果php.ini中log_errors= On,据官方的说法,那么必须指定error_log文件,如果没指定或者指定的文件没有权限写入,那么照样会输出到正常的输出渠道,那么也就使得display_errors 这个指定的Off失效,错误信息还是打印了出来。将log_errors = Off就行了。

总结下,在生产环境中不现实错误信息还能记录错误日志:

 

 代码如下 复制代码
<?php
/**
 * 记录生产环境错误日志
 *
 * @link http://www.111cn.net
 */
error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);
ini_set('error_log','E:\'.date('Y-m-d').'_phpddt.com.txt');
[!--infotagslink--]

相关文章

  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • PHP正则表达式取双引号内的内容

    取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • php 中英文混合字符串截取

    文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
  • php 验证只能输入汉字、英语、数字的正则表达式

    正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
  • C#实现对字符串进行大小写切换的方法

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 常用的日期时间正则表达式

    常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25