PHP函数、数组和字符串处理

1.函数(一):自定义函数


1)基本格式:

function 函数名(参数1,…,参数n[可以省略]){
函数体;//任何有效的PHP代码
return 值;//也可以不返回值
}
函数名();//函数的调用,函数名与上面一致

2)参数:

​ 分为形式参数和实际参数,形式参数由零个、一个或多个变量组成,实际参数由零个、一个或多个参数组成,每个参数是一个表达式用逗号隔开。例:

1
2
3
4
5
6
7
8
9
<?php
function add($a,$b){//形式参数,没有具体的值。
echo $a+$b;
}
add(10,20);//实际参数,输出30。
echo '<br>';
$i=100;
add($i,20);//输出120
?>//实际参数和形式参数要一一对应。

3)返回值:如果不写则函数默认返回值为null,例:

1
2
3
4
5
6
7
8
<?php
function add($a,$b){
return $a+$b;//返回值给调用的地方,结束函数运行
}
var_dump(add(10,20));//输出int 30。
$i=add(10,20);
echo $i;
?>//输出30

2.函数(二):PHP变量范围


1)局部变量:在函数内定义,作用仅限于函数内部。

function test(){
$a=1;//局部变量,仅在这个函数内部有效
}
echo $a;//错误,无输出。

2)全局变量:在函数外定义,作用域从变量定义到本程序结尾,在PHP函数中无法直接使用,需用global声明变量。

$i=10;//全局变量
define(’MY_NAME’,’袁’);
function test(){
echo MY_NAME;
global $i;
echo $i;
}
test();//输出袁、10。

3)静态变量:在函数内部定义变量时候使用static定义变量,静态变量仅在第一次执行函数的时候会初始化值。

function test(){
static $a=10;//静态变量,初始化静态变量,仅在第一次使用执行。
echo ++$a;
}
test();//输出11
echo ’< br>’;
test();//输出12
echo’< br>’;
test();//输出13

3.函数(三):参数传递,可变函数


1)函数的传递

按值传递参数(默认方式):对形式参数的操作,不会影响到实际参数(变量)的值,两者没有联系。例:

1
2
3
4
5
6
7
8
<?php
function test($a){
echo ++$a;
}
$i=10;
test($i);
echo '<br>'.$i;
?>//输出11、10

按引用传递参数:相当于形式参数和实际参数指的是同一个人,只是名字不一样,对于形式参数的操作会直接影响到实际参数(变量)。

1
2
3
4
5
6
7
8
<?php
function test(&$a){
echo ++$a;
}
$i=10;
test($i);
echo '<br>'.$i;
?>//输出11、11

函数的默认参数:可以给形式参数设置默认值,设置方法直接赋值即可。给形式参数加默认值时是从右往左加的,右边的必须有,才能给左边加。

1
2
3
4
5
6
<?php
function test($a=10,$b=20){
echo $a+$b;
}
test(20,20);
?>//输出40

可变长度参数列表:PHP有提供给我们的函数,可直接使用。func_get_args();func_get_arg();func_num_args();这三个函数可以使用在我们的自定义函数内部,返回一些关于参数的信息。

1
2
3
4
5
6
7
8
<?php
function test(){
var_dump(func_get_args());//返回一个数组类型,将实参列举出来
var_dump(func_get_arg(3));//传入一个值表示获取第几个实参(从0开始)
var_dump(func_num_args());//返回传入所在自定义函数的参数个数
}
test(12,9,'wasd','袁');
?>

2)可变函数(变量函数)

可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。

1
2
3
4
5
6
7
<?php
function test(){
echo '我是test函数';
}
$a='test';//把函数名赋值给变量
$a();//相当于test();
?>

4.函数(四):递归函数和内部(内置)函数


1)递归函数

递归函数即在函数内部自己调用自己的函数,函数在被调用的执行过程中会在内存里面分配空间用于存储临时数据,那么函数在执行过程中默认之间是没有联系的(除了静态变量、按引用传、全局变量),里面的变量默认都是局部变量,相互之间没有影响!递归函数,在函数的内部需要有适时结束函数运行的条件!

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function test($n){
echo $n.'&nbsp;';
if($n>0){
test($n-1);//自己内部调用自己,即递归函数
}else{
echo'<-->';
}
echo $n.'&nbsp;';
}
test(3);
?>//输出3 2 1 0 <--> 0 1 2 3

2)内部(置)函数

PHP提供给我们许多现成的函数或者结构,比如:echo()、include()、include_once()、require()、require_once(),上面这些可以省略括号,严格意义上不是函数,所以这些不能赋值给另外的变量。还有一些函数需要开启特定的PHP扩展模块,否则在使用的时候会出现“未定义函数”的错误。只需要记一些常用的内部函数和扩展函数,其他有需要再去找对应函数。

5.数组(一):理解数组和创建数组


1)数组分类:

索引数组:索引值(相当于给里面的每一个数据起个名字)为整数的数组。

关联数组:索引值为字符串的数组,使用字符串作为索引。

2)数组创建:PHP数组与其他编程语言不同的是PHP不需要在创建数组时,指定数组大小甚至不需要在使用数组之前声明,也可以在同一个数组中存储任何类型的数据。

(1)$student[索引值]=具体的值;

如果省略索引值那么默认索引值就是整数,并且从0开始,依次递增。如:$student[0]=10;$student[1]=’袁’;…相当于$student[ ]=10;$student[ ]=’袁’;使用printf_r($student);输出。

(2)$student=array(索引值=>具体值,……);

例:$student1=array(
0=>10,
1=>’袁1’,
2=>true,
3=>60.5
);//索引数组
或$student2=array(
‘num’=>10,
‘name’=>’袁2’,
‘sex’=>true,
‘grade’=>60.5
);//关联数组
或$student3=array(
0=>array(1,’小明’,true,70.5),
1=>array(2,’小强’,true,75.5),
2=>array(3,’小红’,false,80.5)
);//二维数组

多维数组访问数值方法:变量名称[索引值][索引值]

6.数组(二):遍历数组


1)for循环:用得少只能用于索引数组。

2)foreach语句实现遍历数组目的,格式:

foreach(数组变量 as 变量1=>变量2){
每次循环执行的语句
变量1代表当前正在访问的数据的索引值
变量2代表当前正在访问的数据
}

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$student=array(
array('小明',1,true,60.5),
array('小强',2,true,70.5),
array('小红',3,false,80.5)
);
echo '<table border=1>';
foreach($student as $val){
if($val[2]===true){
$val[2]='男';
}else{
$val[2]='女';
}
echo "<tr><td>{$val[0]}</td><td>{$val[1]}</td><td>{$val[2]}</td><td>{$val[3]}</td></tr>";
};
echo '</table>';
?>

7.数组(三):预定义超全局数组


预定义数组变量:已经定义好(存在)的变量(存放的数据的类型是数组)。超全局变量

传递(提交)数据给服务器的两种方式

get方式:格式:url地址?参数名=参数值&参数名=参数值……,在服务器端(请求的php文件这边)可以通过$_GET来获取到,$_GET索引值为参数名,索引值对应的数据就是参数值。

post方式:比如表单、post发送过来的。可以通过$_POST来获取到。例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$_POST;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>预定义超全局变量</title>
</head>
<body>
<form method="post">
姓名:<input type="text" name='username' /><br />
性别:<input type="text" name='sex' /><br />
<input type="submit" value='提交' />
</form>
</body>
</html>

8.数组(四):处理数组的相关函数


数组函数 部分函数举例:

1)array_count_values():用于统计数组中所有值出现的次数。

1
$array = array(1, "hello", 1, "world", "hello");$arr=array_count_values($array);//函数返回数组类型的数据print_r($array);

2)array_key_exists():检查指定的键名是否存在于数组中。

1
2
$search_array = array('first' => 1, 'second' => 4);
var_dump(array_key_exists('second',$search_array));

3)array_search():搜索数组中给定的值并返回键名。

1
2
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red',4=>15);
var_dump(array_search('15', $array,true));

4)count():返回数组中元素的数目。

1
2
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 =>   'red',4=>15);
var_dump(count($array));

5)in_array():检查数组中是否存在指定的值。

1
2
$os = array("Mac", "NT", "Irix", "Linux");
var_dump(in_array('Mac', $os));

6)list():把数组中的值赋给一些变量。

1
2
3
$arr=array(60,80,100);
list($xiaoqiang,$xiaohong,$xiaoming)=array(60,80,100);
echo $xiaoqiang;

7)asort
():对关联数组按照键值进行升序排序。

1
2
3
4
5
6
7
8
$students=array(
'xiaoming'=>60,
'xiaohong'=>80,
'xiaoqiang'=>100,
'xiaowang'=>90
);
asort($students);
print_r($students);

直接对数组里面的数据进行排序,第二个参数


SORT_REGULAR - 正常比较单元(不改变类型)

SORT_NUMERIC - 单元被作为数字来比较

SORT_STRING - 单元被作为字符串来比较

SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较。


8)array_filter():用回调函数过滤数组中的元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function odd($var)
{
return($var % 2 == 1);
}
function even($var)
{
return($var % 2 == 0);
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));

9.字符串处理


字符串函数 部分函数举例:

1)去除空白或其他字符函数

trim():移除字符串两侧的空白字符和其他字符。

1
2
3
$str='    abc   ';
var_dump($str);
var_dump(trim($str));
1
2
3
$str='abcabcdefac';
var_dump($str);
var_dump(trim($str,'bac'));//如果要去除多个字符可以连着写!

另外:ltrim()函数可以移除字符串左侧的空白字符或其他字符,rtrim()函数可以移除字符串右侧的空白字符或其他字符,用法和trim相同。

2)大小写转换函数

strtoupper:把字符串转换为大写字母。strtolower:把字符串转换为小写字母。

例:echo strtoupper(”Hello WoRLD!”);

3)字符串查找函数

substr_count
():计算子串在字符串中出现的次数。

1
2
3
4
5
6
$str='testteste';
var_dump(substr_count($str,'te'));
$text2 = 'gcdgcdgcd';
echo substr_count($text2, 'gcdgcd');
$str='testteste';
var_dump(substr_count($str,'te',1,8));//不能超出字符串

strpos():返回字符串在另一字符串中第一次出现的位置(对大小写敏感)。

1
2
3
4
5
6
7
8
9
$str='testteste';
var_dump(strpos($str,'t1'));
if(strpos($str, 't')===false){
echo '没找到!';
}else{
echo '找到啦!';
}
$str='testteste';
var_dump(strpos($str,'t',1));

strstr():查找字符串在另一字符串中的第一次出现(对大小写敏感)。

1
2
3
4
$str='testteste';
var_dump($str);
var_dump(strstr($str,'s'));
var_dump(strstr($str,'s',true));

4)字符串替换函数

str_replace():替换字符串中的一些字符(对大小写敏感)。

1
2
3
4
5
6
7
8
9
10
$str=array(
'abc123abc',
'123abcabc',
'abcab123c'
);
var_dump($str);
echo '<br>';
$str1=str_replace(array('1','2','3'),array('一','二','三'),$str,$count);
echo $count.'<br>';
var_dump($str1);

5)与html标签相关的函数

htmlspecialchars():把一些预定义的字符转换为 HTML 实体。


1
2
3
4
5
6
$str=<<<START
<p style="color:red;font-size:128px;">嘻嘻嘻</p>
START;
echo $str;
echo "\n";
echo htmlspecialchars($str);

strip_tags():剥去字符串中的 HTML 和 PHP 标签。

1
2
3
4
5
6
7
$str=<<<START
<p style="color:red;font-size:128px;">嘻嘻嘻</p>
<div style="color:red;">流年、乱了浮生</div>
START;
echo $str;
echo "\n";
echo strip_tags($str,"<div><p>");

6)字符串截取函数

substr():返回字符串的一部分。

1
2
3
4
$str='testdqwdwqdwqdqdwq';
echo substr($str,3,2);
$str='test';
echo substr($str,-3,2);

7)字符串分隔函数

explode():把字符串打散为数组。

1
2
$str='test,test1,test2,test3';
var_dump(explode(',',$str,2));

str_split():把字符串分割到数组中。

$str=’test’;

var_dump(str_split($str,3));