PHP 数组Array
直接赋值声明数组
1.一个数组中存的是多个内容,数组中的内容叫做"元素"
2.每个元素都是由键和值组成的 key/value,key下标value对应的值
$arr[]=0;$arr[2]=2; $arr['three']=3;
3.通过key使用值
下标有两种类型:一种是整数(索引数组),一种是字符串(关联数组)
4.[]来操作下标,也可以使用{}进行互换,建议用[]来指定下标
5.在使用下标时,如果是关联数组,一定要用引号,不要使用常量名称.
6.数组的自动增长下标,默认是从0开始的,自动增长的都是出现过的最大值加1
7.关联数组的字符串下标,不会影响所有下标的排列规则!
使用array()函数声明数组,默认是索引的下标,是从0开始
8.使用 =>符号指定下标
9.php5.4以后,可以像其他语言一样声明数组了
$arr =['aaa','bbb',3=>'hello','cccccccc'];
10.删除一个数组中的一个元素,unset()函数允许删除数组中的某个键.
但是要注意数组将不会重建索引,如果需要删除后重建索引,可以用array_values()函数.
应用实例:猴子选大王
<?php function selectking($m,$n){ $arr=array(); $a ='a'; for($i=0;$i<$m;$i++){ $arr[] = $a++; } $j = 0; while(count($arr)>1){ if($j%$n==0){ unset($arr[$j]); }else{ $arr[] =$arr[$j]; unset($arr[$j]); } $j++; } return $arr; } var_dump(selectking(30,3)); ?>
php二位数组和多维数组
数组的遍历
一.使用for语句循环遍历数组(保证数组,一定要是下标连续的索引数组)
不足:
1.数组下标不一定是连续的
2.关联数组for不能遍历出值
二.使用foreach语句遍历数组
foreach(数组 as 自定义变量){ ... }
1.数组有多少个元素,foreach就循环多少次
2.foreach会将数组中的元素 在每次循环中,依次将元素的值给自定义的变量,
在每次循环中用到这个变量,即用到了当前数组中的元素.
foreach(数组 as 下标变量 =>值变量){ if(is_array()) ... }
三.联合使用list(),each()和while循环遍历数组
list()函数 但这个函数和其他函数的用法不同
作用: 将数组中的元素转为变量使用
1.等号左边使用list()函数,等号右边只能是一个数组
2.数组中有几个元素,在list()中就有几个参数,而且参数必须是变量(新声明的自定义变量),不能是值
list($a,$b,$c) = array('zhangsan','lisi','wangwu');
3.只能将索引数组(下标是连续的),转为变量,是按下标0开始找的.
4.可以在list()参数中通过空项选择性的接收数组中的元素
list($a, ,$c) = array('zhangsan','lisi','wangwu');
each()只是一个函数,参数就是一个数组作为参数,返回的值,也是一个数组
1.返回的值是一个数组,数组固定有4个元素,而且下标也是固定的, 1(值) value(值) 0(下标) key(下标)
2.each()只处理当前的元素(默认当前元素是第一个元素,指针指向第一个元素),将当前的元素转为数组信息,处理完后,指针向下一个元素移动
3.如果指针已经在结束位置了,再使用each()获取元素,返回false
$arr = array('zhangsan','lisi','wangwu'); while(list($key,$val) = each($arr)){ echo $key.','$val.'<br/>'; }
使用数组的内部指针控制函数遍历数组
next(),prev(),end()及reset()
这四个函数可以控制目前数组中的指针位置.next()负责将指针向后移动,prev()负责将指针向前移动;end()会将指针指向数组中最后一个元素,而reset()函数则会将目前指针无条件移至第一个索引位置,这几个函数的参数都是数组.
key()获取当前数组的key键名,current()获取当前数组的value键值.
超全局数组
超全局数组(变量),在php的脚本中,已经声明完的变量,你可以直接就去使用即可!变量的名字已经规定好的了.
$_SERVER 服务器变量
$_ENV 环境变量
$_GET HTTP GET变量
$_POST HTTP POST变量
$_REQUEST request变量
$_FILES HTTP 文件上次变量
$_COOKIE HTTP Cookies
$_SESSION Session变量
$GLOBALS Global变量,包含所有超全局数组
1.数组(关联数组),就和我们自己声明的数组是一样的操作方式
2.全局
3.每个预定义的数组都有自己独特的功能
$_GET 接收用户通过URL向服务器传的参数 get
$_POST 接收用户通过http协议向服务器传的参数 http post
$_REQUEST 默认是$_GET, $_POST, $_COOKIE的集合,版本5.3以上,php.ini中有request_order属性来设置$_REQUEST,原来是G,P,C分别代表Get,Post,Cookie,5.3以上的版本request_order默认是设置成GP的,并不包含C,即$_REQUEST默认只包含$_GET和$_POST !
数组处理函数
数组的键/值操作函数
array array_values( array $input) 返回数组中所有的值
array_keys — 返回数组中所有的键名
in_array — 检查数组中是否存在某个值
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
在 haystack 中搜索 needle,如果没有设置 strict 则使用宽松的比较。区分大小写.
array_search — 在数组中搜索给定的值,如果成功则返回相应的键名
array_key_exists — 检查给定的键名或索引是否存在于数组中
isset — 检测变量是否设置
检测变量是否设置,并且不是 NULL,所以无法判断空值
array_flip — 交换数组中的键和值
array array_flip ( array $trans )
array_flip() 返回一个反转后的 array,例如 trans 中的键名变成了值,而 trans 中的值成了键名。如果值重复了,后面会覆盖前面.并且值只能是int和string.
array_reverse — 返回一个单元顺序相反的数组
array array_reverse ( array $array [, bool $preserve_keys = false ] )
如果设置为 TRUE 会保留数字的键。 非数字的键则不受这个设置的影响,总是会被保留。
统计数组元素的个数与唯一性
count — 计算数组中的单元数目或对象中的属性个数
array_count_values — 统计数组中所有的值出现的次数
array array_count_values ( array $input )
array_count_values() 返回一个数组,该数组用 input 数组中的值作为键名,该值在 input 数组中出现的次数作为值。
array_unique — 移除数组中重复的值
array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )
array_unique() 接受 array 作为输入并返回没有重复值的新数组。第一次出现的保留,后面重复的去掉.
使用回调函数处理数组的函数
array_filter — 用回调函数过滤数组中的单元
array array_filter ( array $input [, callable $callback = "" ] )
依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
//过滤2的倍数,匿名函数实现 array_filter($arr,function(){ return !($value % 2 == 0); });
array_walk — 对数组中的每个成员应用用户函数
bool array_walk ( array &$array , callable $funcname [, mixed $userdata = NULL ] )
将用户自定义函数 funcname 应用到 array 数组中的每个单元。如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname。
//引用改变原来的数组 //array_walk($arr, function(&$value, $key){ array_walk($arr, function($value, $key){ echo "{$key}------------->{$value}<br/>"; })
array_map — 将回调函数作用到给定数组的单元上
array array_map ( callable $callback , array $arr1 [, array $... ] )
array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
冒泡排序
<?php $arr = array(3,8,11,20,5,7,13); function bobsort($arr){ $num = count($arr); for ($i=0; $i <$num-1; $i++) { for($j = 0; $j<$num-$i-1;$j++){ //从小到大 if($arr[$j]>$arr[$j+1]){ $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } } return $arr; } var_dump(bobsort($arr));
快速排序
浙公网安备 33010602011771号