PHP的数组功能很强大,有很多和OC或者其他语言不一样的地方,譬如说其数组元素不限制类型,这种类似于swift的元组。以下是其相关特性:
1.数组中的元素 由键和值构成,key/value
2.两种下标类型:①整数(索引数组) ②字符串
3.[ ]来操作下标,也可以用{}进行互换,建议使用[ ]来指定下标
4.如果是关联数组,一定要带引号,不要使用常量名称,处理速度较之慢8倍
数组声明时,如果[ ]中没有下标,往数组中添加元素是按自动增长的下标顺序来赋值
$arr = array();
for($i = 0;$i<2;$i++){
array[ ] = $i * $i;
}
echo'';//数组的最原始形态语句
print_r($arr); //array[0] = 0 ;[array[1] = 1;
echo'
;
数组的自动增长下标默认是从0开始,自动增长的出现过的最大值加1;
关联数组的字符串下标,不会影响索引下标的排列规则;
负数也可以做下标;
$arr[ ] = 10;//下标0
$arr[ ] = 10;//下标1
$arr[8] = 10;//下标8
$arr[ ] = 10;//下标9
$arr[9] = 10;//下标9覆盖上一个
$arr[4] = 10;//下标4
$arr[ ] = 18;//下标10
$arr['one'] = 66;
$arr[ ] = 99;//下标11
$arr[-100] = 11;//下标-100
$arr[ ] = 20;//下标12
数组的声明
方式1:
$arr = array("aaa","two"=>"bbb",9=>"ccc","ddd");
方式2:php5.4以后 短数组定义语法
$arr = ["aaa","bbb",333,9=>444,555];
删除数组中的一个元素使用unset(),下标不会重新索引,需要使用array_values()函数重新索引
$arr = ["one","two","three","four"];
unset($arr[2]);//Array ( [0] => one [1] => two [3] => four )
$arr = array_values($arr);
print_r(arr);
//Array ( [0] => one [1] => two [2] => four )
多维数组可以调用方式和OC类似,不过多了一个关联下标的形式
$arr[1]["one"];
数组的遍历
for循环
效率最高,但数组下标比一定连续,关联数组无法遍历出值
$arr = array("wp","wo","we","ew");
$num = count($arr);
for($i=0; $i < $num; $i++) {
echo $arr[i];
}
foreach
有多少元素,循环多少次
foreach ($variable as $key => $value) {
可以把键值都返回
}
联合使用List(),each()和while循环
List()函数
将数组中的元素转为变量使用
①等号左边使用List()函数,等号右边只能是一个数组。
②数组中有几个元素,在list()中就用几个参数,而且参数必须是变量(新声明的自定义变量),不能是值
③只能将索引数组(下标是连续的),转为变量,是从0开始
④可以在list()参数中通过,空项选择性的接收数组中的元素
list($a, ,$c) = array("123","sp","we");
echo $a."
";
echo $c."
";
list($name,$pro) = explode("_",$str);
echo $name."
";
echo $pro."
";
each()函数
只是一个函数,参数就是一个数组,返回值也是一个数组
①返回的值是一个数组,数组固定有4个元素,且下标也是固定的(1(值)Value(值)0(下标)key(下标))
②each()只处理当前的元素(默认当前元素为第一个元素,指针指向第一个)转为数组信息后,处理完后,指针指向下一个元素
③如果指定已经在结束位置了,如果再使用each()获取元素,返回false
$arr = array("one"=>"wp","wo","we");
echo '';
$one = each($arr);
print_r($one);
$one = each($arr);
print_r($one);
$one = each($arr);
print_r($one);
$one = each($arr);
var_dump($one);
echo '
';
//返回结果
Array ( [1] => wp [value] => wp [0] => one [key] => one )
Array ( [1] => wo [value] => wo [0] => 0 [key] => 0 )
Array ( [1] => we [value] => we [0] => 1 [key] => 1 )
bool(false)
List()、each()、while联合使用
$arr = ["one"=>"妹纸","wp","we","ee"];
while (list($key,$value) = each($arr)) {
echo "{$key} => {$value}
";
}
使用数组的内部指针控制函数遍历数组
next($arr);//下一个
end($arr);//最后一个
prev($arr);//前一个
reset($arr);//重置
key($arr);//获取当前下标
current($arr);//获取当前值
超全局数组
超全局数组,系统已经声明完的变量,可以直接使用。每个预定义数组都有自己独特的功能。
常用的超全局数组
$_SERVER 服务器变量,可以获取服务器所有的信息
$_ENV 环境变量
$_GET 接收用户通过URL向服务器传的参数
$_POST 接收用户通过HTTP协议向服务器传的参数
$GLOBALS
$_REQUEST 有安全风险,一般不用
$_FILES 上传文件信息
$_COOKIE
$_SESSION
$GLOBALS = array("123","wp");
function demo(){
// echo $GLOBALS.'
';
// print_r($GLOBALS).'
';
foreach ($GLOBALS as $son => $fuck) {
echo $son.$fuck.'
';
}
}
demo();