1、数组创建
索引数组:数组下标是数字
//自动分配: $cars=array("Volvo","BMW","SAAB"); //手动分配1: $cars[0]="Volvo"; $cars[1]="BMW"; $cars[2]="SAAB"; //手动分配2(与1等价): $cars[]="Volvo"; $cars[]="BMW"; $cars[]="SAAB";
关联数组:数组下标是字符串
//自动分配: $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); //手动分配: $age['Peter']="35"; $age['Ben']="37"; $age['Joe']="43"; echo "Peter is " . $age['Peter'] . " years old.";
多维数组
多维数组是数组的嵌套,即数组中又包含数组
二维数组例子;
<?php $cars = array ( array("Volvo",22,18), array("BMW",15,13), array("Saab",5,2), array("Land Rover",17,15) ); echo $cars[0][0].": 库存:".$cars[0][1].", 销量:".$cars[0][2].".<br>"; echo $cars[1][0].": 库存:".$cars[1][1].", 销量:".$cars[1][2].".<br>"; echo $cars[2][0].": 库存:".$cars[2][1].", 销量:".$cars[2][2].".<br>"; echo $cars[3][0].": 库存:".$cars[3][1].", 销量:".$cars[3][2].".<br>"; ?>
可以在 for 循环中使用另一个 for 循环,来获得 $cars 数组中的元素(仍需使用两个索引):
2、数组遍历
for()循环(略)
foreach循环
语法:
foreach ($array as $value) { code to be executed; }
例子:
索引数组:
$colors = array("red","green","blue","yellow"); foreach ($colors as $value) { echo "$value <br>"; }
关联数组:
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; }
list,each,while遍历(list看不到字符串下标的值)
list的作用:list — 把数组中的值赋给一组变量
list() 仅能用于数字索引的数组,并假定数字索引从 0 开始
each — 返回数组中当前的键/值对并将数组指针向前移动一步
返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为0,1,key和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。(看手册)
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry'); reset($fruit); while (list($key, $val) = each($fruit)) { echo "$key => $val\n"; }
使用数组的内部指针控制函数遍历数组
key()获取当前数组指针所在键值,
current()获取当前数组指针所在元素值,
next()获取当前数组指针下一个元素值并将指针下移一位,
prev()获取当前数组指针上一个元素值并将指针上移一位,
end()获取当前数组最后一个元素值并将指针移到最后,
reset()获取当前数组第一个一个元素值并将指针移到第一位
3、获得数组的长度:count($arr)
4、数组排序
sort($arr) - 按值把数组值进行排序,升序,不保留key
rsort($arr) - 按值把数组值进行排序,降序,不保留key
asort($arr) - 按值把数组值进行排序,升序,保留key
arsort($arr) - 按值把数组值进行排序,降序,保留key
ksort($arr) - 按键把数组值进行排序,升序,保留key
krsort($arr) - 按键把数组值进行排序,降序,保留key
natsort();-自然排序,用于有字符串数组
natcasesort();-忽略大小写的自然排序,用于有字符串数组
array_multisort();-用一个数组对另外一个数组进行排序
5、array_map();将回调函数作用到给定数组的单元上
6、键值操作
获取数组中的值
array_values();返回含所有值的索引数组
获取数组中的键
array_keys();返回数组中部分的或所有的键名
array array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] )
检查一个值是否在数组中
in_array();
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
检查一个键是否在数组中
array_key_exists();
键和值对调
array_flip();
数组中的值反转
array_reverse();
删除数组中重复值
array_unique();
统计数组中值出现的次数
array_count_values();(限于元素为字符串或整型的数组)
自己实现
function acv($arr){ foreach($arr as $val){ if(!isset($arr2[$val])) $arr2[$val]=0; $arr2[$val]++; } return $arr2; }
数组值过滤
array_filter();
自己实现(还没有实现回调函数):
function af($arr){ foreach($arr as $k=>$v) if(empty($v)) unset($arr[$k]); return $arr; }
7、拆分、合并、分解与结合函数
array_slice($arr,$index,$length);返回截取的一段值,原数组不变
array_splice($arr,$index,$length);返回截取的一段值,改变原数组
array_combine($arr1,$arr2);合并,前一个是key,后一个是value
array_merge(); 并集;合并,键值相同,后面覆盖前面
implode();/join() 把数组连接成字符串
$str=implode($arr,'-');
explode();把字符串分解成数组
$str='2016-06-27';
$arr=explode('-',$str);
8、插入删除函数
array_pop();从最后弹出一个值,返回弹出值
array_push();从最后压入一个值,返回数组个数
array_shift();从前面弹出一个值,返回移出值,原数组下标重排
array_shift($arr);不考虑返回值,等价于array_splice($arr,0,1);
array_unshift();从前面插入一个值,返回数组个数
array_unshift($arr,$v);不考虑返回值,等价于$arr=array_merge(array($v),$arr);
9、其他常用函数
array_rand();随机取一个key
shuffle();打乱数组
array_sum();数组所有值的和
array_product($arr)求数组乘积
array range ( mixed $start , mixed $end [, $step = 1 ] )获取一个范围内数组
小应用
//生成随机验证码 $arr=range(0,9); $arr2=range('a','z'); $arr3=range('A','Z'); $arr4=array_merge($arr,$arr2,$arr3); shuffle($arr4); $arr5=array_slice($arr4,0,4); $str=join($arr5,''); echo $str;
10、超全局数组
1)$_SERVER 查看服务器信息
2)$_GET 地址中参数
localhost/index.php?id=10&name=user1&age=20&sex=nan
echo "<pre>";
print_r($_GET);
echo "</pre>";
可用于超链接传值、表单传值
3)$_POST 表单提交的值
4)$_REQUEST $_GET和$_POST全接收
速度慢,不推荐使用
5)$_FILES 文件上传
6)$_COOKIE 跟踪用户状态
7)$_SESSION 保存会话信息
8)$GLOBALS 获取所有全局变量和超全局变量