函数,数组

函数

自定义函数

// 定义函数
function 函数名([形参列表]) {
函数体;
return 表达式; //可以写可以不写,看实际需要
}
// 调用函数(可以直接使用函数)
$a = 函数名(实际参数);


// 函数参数(可以传,也可以不传,看实际需要)
// 假设有变量$a=10
$a=10;
// 按值传参:不会修改到外部$a的值
function stuPHP1($a) {
echo ++$a;
}
// 按引用传参: (个人理解 -> 传地址)
function stuPHP2(&$a) {
echo ++$a;
}
// 默认参数:
// 调用时不传入参数,就使用默认的参数值
// 添加的默认参数必须从右往左加
function stuPHP3($a=300) {
echo ++$a;
}
// 可变长度参数列表
// PHP提供的,可以直接使用
func_get_args(); // 将传入的参数转换为一个列表
func_get_arg(下标); // 将传入的参数转换为一个列表,但会获取指定下标的参数值
func_num_args(); // 返回传入参数的个数

变量范围

局部变量 :函数内定义,作用域仅限于函数内。
全局变量 :函数外部定义,作用域在定义开始至程序文件尾。
静态变量 :static定义的内部变量,仅第一次调用时初始化,第二次调用时不会初始化(也就是值和上次调用结束时相同)

可变函数

函数名字带上引号,赋值给变量即可。

function stuPHP(){
echo "Hello PHP!";
}
$a = "stuPHP";
$a(); // => 相当于stuPHP();

递归函数

自己调用自己。

递归

<?php
$strs = "";
function stuPHP($n)
{
if ($n > 0) {
stuPHP($n - 1);
$strs .= (string)$n . " ";
} else {
echo "------------------------";
}
echo $strs;
}
$a = 10;
stuPHP($a);
// 网页端输出结果:
------------------------1 2 3 4 5 6 7 8 9 10

如果不解,可以看看Java那篇日志的递归,原理是共通的。

内置函数

php提供我们现成的函数或结构。有些函数需要开启扩展模块才能使用。

数组

数组的分类

索引数组是按照数字索引来存储数据的数组
关联数组是按照字符串索引来存储数据的数组
多维数组是按照多个索引来存储数据的数组

数组创建

不用指定大小,不用声明,可以存储任何类型数据。

说明:组成如下,值1可以是任何类型,也可以是数组。
键名可以是整数,也可以是字符串。但默认的键名是从0开始的整数。
$a = array(键名1=>值1,键名2=>值2)

当键值是一维数组时,和套着它们的一维数组合起来,就称为二维数组。
当然,这个数组的维度可以自己叠加,看你实际的生产需要。


<?php
// 创建数组arr1
// 没写键名/索引值,默认为从0开始的整数。
$arr1 = array(11,12,13);
// 相当于创建数组:arr2 = array(0=>11,1=>12,2=>13)


// 创建数组arr2
$arr2[0] = 123;
$arr2[1] = 456;
$arr2[2] = 789;
$arr2[3] = 101;
// 相当于创建数组:arr2 = array(0=>123,1=>456,2=>789,3=>101)

// 创建数组arr3
// 索引值会默认从0开始
$arr2[] = 123;
$arr2[] = 456;
$arr2[] = 789;
$arr2[] = 101;
// 相当于创建数组:arr3 = array(0=>123,1=>456,2=>789,3=>101)


// 输出数组值的办法
echo arr[键名];
?>

数组遍历

// 遍历方法1
// 如果是使用整数遍历数组,获取数组的大小+使用for循环输出即可
// count(arr[,num]):返回数组的元素个数,num不选择默认为0,遍历到第一层过。
// 如果num为n,那么返回的值就是:第一层的元素个数+第二层的元素个数+...+第n层的元素个数
for($a=0;$a<count(arr1);$a++){
echo arr1[$a];
}

// 遍历方法2
// 如果说,遍历数组的键名不全是整数,就得使用另外一个方法:指针
next(数组名); //把指针指向下一个元素
prev(数组名); //把指针指向上一个元素
reset(数组名); //把指针指向第一个元素
end(数组名); //把指针指向最后一个元素
key(数组名); //取数组当前元素的键名
each(数组名); //取数组当前元素的键名和值,并且把指针移向下一个元素
list($var1,$var2,$var3...)=arr; //把数组arr分别赋值给变量var1,var2,var3...
for($a=0;$a<count(arr1);$a++){
next(arr1);
echo key(arr1);
}

// 遍历方法3
// 直接获取变量的值来遍历
foreach(数组 as 变量) {
echo 变量;//变量存储的是数组的值
}

// 遍历方法4
// 键名是获取数组的键名
// 变量数获取数组的键值
foreach(数组 as 键名=>变量) {
echo 键名.":".变量."\n";
}


预定义超全局数组变量

全部作用域都可以使用。

1)$GLOBALS
2)$_SERVER

服务器变量,不同的web服务器可能会有不同的一些内容
3)$_GET
获取HTTP GET方式传递的参数,比如ur1或者表单GET方式传过来的参数
4)$_POST
获取HTTP POST方式传递的参数,比如表单POST方式传过来的参数
5)$_FILES
HTTP文件上传变量
6)$_COOKIE
7)$_SESSION
8)$_REQUEST
包含了$_GET,$_POST和$_COOKIE中的全部内容
9)$_ENV
环境变量和PHP所运行的环境有关若没有数据可能与php.ini配置项variables order配置项有关

传递数据的方式(重要)

提交数据,给服务端主要的两种形式。

1.get方式

比如:
http://www.xxx.com/index.php?参数名1=参数值1&参数名2=参数值2
接收端接收数据时,使用$_GET("name")获取数据
注意,这是明文传输的,保密性较低

2.post方式

传输的使用form使用post传输,无法在url框框看到。
注意,这个传输保密比get高,稍微安全些。

处理数组的相关函数

  1. array_count_values(数组名) :将数组的值作为键,并且将它们出现的次数作为值。
  2. array_key_exists(键名,数组名) :检测键名是否存在于数组中
  3. array_search(“值”,数组名[,bool]) : 在数组搜索给定的值,存在=>返回索引值(键名) ,不存在=>false(4.4版本前为null).[,bool]部分默认为false,为true时需要匹配不仅仅是值,还有它的类型
  4. count :返回数组元素个数
  5. in_array(value,array,type) :判断数组array是否存在指定值value,存在则返回true,反之false。type是类型
  6. list :前面有提到一嘴,list是用来拆分数组的每个值到每个变量当中的。
  7. asort :值升序,且键名与值的对应关系不变,与之相对的函数有:arsort
  8. sort :值升序,且键名与值的对应关系变更为从0到n的整数,与之相对的函数有:rsort
  9. array_filter(array,callback) :过滤数组中的元素,只保留满足指定条件的元素
  10. shuffle(数组名) :值顺序打乱,键名重置为0开始的整数
  11. array_reverse(数组名[,key]) : key=>false(默认)数组倒过来排序;key=>true数组保留原键名并且倒过来排序。