首页 > 编程技术 > php

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

发布时间:2016-11-25 15:42

下面给各位同学整理了一些关于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--]

您可能感兴趣的文章: