php 数组
数组:array ,数据的组合,值将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性的到该容器中的所有数据
语法:定义数组可以用 array()
或 []
来新建一个数组。它接受任意数量用逗号分隔的键(key) => 值(value)对。key 可以是 integer(索引数组)或者 string(关联数组),value 可以是任意类型,如对象、数组。
$变量 = array(元素1,元素2,[元素3,元素4])
取值:$变量[下标,也叫索引]
赋值:$变量[下边]
$ss = array();
// $ss[0] = 'null';
$sss = array(1=>10,2=>20);
print_r($sss);
for ($f = 0;$f<100;$f++){
array_push($ss,'Item'.$f.'<br/>');
}
print_r($ss);
特点:
可以整数下标或者字符串下标(键值对)
不同下边可以混合存在
数组元素的顺序以放入顺序为准,跟下标无关
数组下标的自增长特性:从0开始自增长
特殊下标的自动转换
// 特殊下标转换 $str[false] = false; $str[true] = true; $str[NULL] = NULL; var_dump($str); // 输出:array(3){[0]=>bool(false) [1]=> bool(true) [""]=> NULL}
--------------------------
多维数组:数组嵌套数组,但不建议使用超过三维以上的数组,过于复杂
--------------------------
数组遍历:
普通数组数将的访问都是通过数组元素的下标来实现访问。
foreach遍历语法:
foreach($数组变量 as[$下标=>]$值){
// 通过$下标访问的下标,同$值访问元素的值
}
通常:如果是关联数组(字母下标),就需要下标,如果是数字下标就直接访问值
$arr = array(1,2,3,4,5,6,7,8,9); // foreach 循环 foreach($arr as $v){ // $v随意命名 echo $v,'<br/>'; }
获取下标
$arr = array(1,2,3,4,5,6,7,8,9); // foreach 循环 foreach($arr as $k=>$v){ // $v随意命名 echo 'key:',$k,'==value:',$v,'<br/>'; }
$arr = array( 0 => array('name'=>'安静','age'=>18), 1 => array('name'=>'静哥哥','age'=>19) ); foreach($arr as $value){ echo 'name is:',$value['name'],'and age is:',$value['age'],'<br/>'; }
原理:本质是数组的内部有一颗指针,默认是指向数组元素的第一个元素,foreach 就是利用指针去获取数据,同时移动指针
for 循环遍历数组
基于已知边界条件(起始和结束)然后有条件的变化(规律)
因此:for循环遍历数组有对应条件
获取数组长度:count(数组)得到数组元素的长度
要求数组元素的下标是规律的数字
// 特点:索引数组,下标规律 $arr = array(1,2,3,4,5,6,7,8,9); for($i = 0,$len = count($arr);$i<$len;$i++){ echo 'key is:',$i,'and value is:',$arr[$i],'<br/>';
}
while 配合each 和list 遍历数组
while 是在外部定义边界条件,如果要实现可以和for循环
each 函数使用:each能够从一个数组中获取当前数组指针所指向的元素的下标和值,拿到之后将数组指针下移,同时将拿到的元素下标和值以一个四个元素的数组返回:
0下标 -> 取得元素的下标值
1下标 -> 取得元素的值
key 下标 -> 去的元素的下标值
value 下标 -> 取得元素的值
$arr = array(1,'name' => 'what',3,'age'=>'18',5); echo '<pre>'; print_r(each($arr)); print_r(each($arr)); print_r(each($arr)); print_r(each($arr)); print_r(each($arr)); var_dump(each($arr));
list 函数使用:list 是一种结构,不算一种函数(没有返回值),是list提供一堆变量去从一个数组中取得元素值,然后依次存放到对饮的变量当中(批量为变量赋值:值来源于数组):list必须从索引数组中去获取数据,而且必须从0开始
$arr = array(1,2 => 1); list($first) = $arr; var_dump($first);
list 与 each 配合特别好:each 一定有两个元素就是 0和1 下标元素
list(变量1,变量2) = each(数组); // 是一种赋值运算,但是可以得到 false 结果(each 取不到正确的结果),整个表达式为 false
$arr = array(1,'name' => 'K',3,'age' => 21); while(list($key,$value) = each($arr)){ echo 'key is:'.$key.'value is:'.$value; }
数组的相关函数
排序函数:
sort(),顺序排序(下标重排)
rsort(),逆序排序
asort(),顺序排序(下标保留)
arsort(),逆序排序
ksort(),顺序排序:按照键名(下标)
krsort(),逆序排序
shuffle(),随机打乱数组元素
指针函数:
reset(),重置指针,将数组指针会到首位
end(),重置指针,将数组指针指导最后一个元素
next(),指针下移,取得下一个元素的值
prev(),指针上移,取得上一个元素的值
current(),获得当前指针对应的元素值
key(),获取当前指针对应的下标值
注意:next 和 prev 会移动指针,有可能导致指针移动到最前或最后(离开数组),导致数组不能使用,通过next 和prev 不能回到真确的指针位置,只能通过end或者reset进行指针
其他函数:
count(),统计数组中元素的数量
array_push(),往数组加入一个元素(数组后面)
array_pop(),往数组取出一个元素(数组后面)
arra_shift(),往数组取出一个元素(数组后面)
array_unshift(),往数组加入一个元素(数组后面)
php模拟数据结构:
栈:压栈,先进去后出来(FILO)
$arr = array(); //栈:先压栈后出栈 //压栈 array_push($arr,3); array_push($arr,2); array_push($arr,1); print_r($arr); //出栈 echo array_pop($arr),array_pop($arr),array_pop($arr),'<br/>';
队列:排队,先进去的先出来(FIFO)
$arr = array(); //入队 array_unshift($arr,3); array_unshift($arr,2); array_unshift($arr,1); print_r($arr); //出队 echo array_pop($arr),array_pop($arr),array_pop($arr),'<br/>';
array_reverse(),数组元素反过来
in_array(),判断一个元素在数组中是否存在
array_keys(),获取一个数组的所有下标,返回一个索引数组
array_values(),获取一个数组的所有值,返回一个索引数组
---