PHP入门03 -- 数组与数据结构
一、数组
直接赋值声明数组
1、一个数组中存的是多个内容,数组中的内容叫作“元素”;
2、每个元素都是由 键和值 key/value key下标
$a = array("one"=>"1111", "two"=>"2222");
3、就是通过 key 使用 值
4、下标有两种类型: 一种是整数(索引数组)、一种是字符串(关联数组)
5、[ ] 来操作下标,也可以使用 { } 惊醒互换,建议使用 [ ] 来指定下标;
6、在使用下标是,如果是关联数组,一定要使用,不要使用常量名称
7、使用 => 符号指定下标
8、删除数组中的一个元素使用unset(),下标不会重新索引,需要使用array_values函数重新索引;
<?php $arr['one'] = 1; $arr['two'] = 2; $arr['three'] = 3; $arr1 = array("aa", 9=>"bbb");//使用 => 符号指定下标 print_r($arr);//打印数组 echo $arr['one'];//单独使用数组 echo "11$arr[three]11";//输出11311
$arr2 = ["1", "2", "3"];
unset($arr2[2]);
$arr = array_values($arr2);
?>
二、数组遍历
1、数组有多少个元素,foreach就循环多次
2、foreach会将数组中的元素 在每次循环中,一次将元素的值给定义的变量,在每次循环中用到这个变量,即用到了当前的数组中的元素
3、foreach(数组 as 自定义变量 ){ }
4、foreach(数组 as 下标变量 => 值变量 ){ } //下标在前,值在后
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> </head> <body> <?php $group = [ "price"=>888, "agne"=>666, ["name"=>"zs", "age"=>20, "sex"=>"男", "email"=>"aaa@bbb.com"], ["name"=>"ls", "age"=>20, "sex"=>"男", "email"=>"aaa@bbb.com"], ["name"=>"ww", "age"=>20, "sex"=>"男", "email"=>"aaa@bbb.com"], ["name"=>"zl", "age"=>20, "sex"=>"男", "email"=>"aaa@bbb.com"], ["name"=>"sq", "age"=>20, "sex"=>"男", "email"=>"aaa@bbb.com"], ["name"=>"wb", "age"=>20, "sex"=>"男", "email"=>"aaa@bbb.com"] ]; // echo "<pre>";//pre:按照源代码输出 echo '<table border="1" width="800" align="center">'; echo '<caption><h1>数组转为表格</h1></caption>'; foreach ($group as $key=>$row) { echo '<tr>'; if (is_array($row)) { foreach ($row as $col) { echo '<td>'.$col.'</td>'; } } else { echo '<td>'.$key.':'.$row.'</td>'; } echo '</tr>'; } echo '</table>'; ?> </body> </html>
三、list() 函数(但是这个函数和其它函数用法不同)
1、作用:将数组中的元素转为变量使用
1、等号左边使用 list() 函数,等号(=)右边只能是一个数组
2、数组中有几个元素,在 list()中就用几个参数,而且参数必须是变量(新声明的自定义变量),不能是值
3、只能将索引数组(下标是连续),转为变量,是按下表 0 开始找的;
4、可以在 list()参数中通过,空项选择性的接受数组中的元素;
list($a, $b, $c) = array("AAA", "BBB", "CCC"); echo $a;//输出 AAA
四、list、each和while 循环遍历数组
$arr = ["one"=>"ONE", "TWO", "THREE"]; while (list($key, $val) = each($arr) ) { echo "{$key} => {$val} <br>"; }
五、超全局数组(预定义变量)
1、超全局数据(变量),在PHP的脚本中,已经声明完的变量,你可以直接就去使用即可!变量的名字已经规定好了
$_SERVER (服务器变量)、$_ENU(环境变量)、$_GET(HTTP GET变量)、$_POST(HTTP POST变量)、
$_REQUEST(request 变量)、$_FILES(HTTP 文件上传变量)、$_SESSION(session 变量)、$GLOBALS(Global 变量)
2、数组 (关联数组),就和你自己声明的数组是一样的操作方式;
3、每个预定义的数组都有自己独特的能力
4、$_GET 接受用户通过URL 向服务器传的参数 get
5、$_POST 接受用户通过 http 协议向服务器传的参数 http post
<a href="demo.php?action[]=add&action[]=mod&id=5&name=admin">测试页面</a> <form action="demo.php?age=www&dd=yy" method="post"> unsername: <input type="text" name="name" /><br /> age: <input type="text" name="age" /><br /> sex: <input type="text" name="sex" /><br /> <input type="submit" value="提交" /> </form>
<!-- demo.php
print_r($_GET);
echo "<br>";
print_r($_POST); -->
6、array_values --- 返回数组中所有的值 --- 格式:array array_values( array input )
$a = array("name"=>"zs", "age"=>20, "sex"=>"男"); $values = array_values($a); var_dump($values); //array(3){[0]=>string(4)"张三" [1]=>int(20) [2]=string(2)"男"}
7、array_keys -- 返回数组中 keys 值 --- 格式:array array_keys( array );
$a = array("name"=>"zs", "age"=>20, "sex"=>"男"); $keys = array_keys($a); print_r($keys); //Array ( [0] => name [1] => age [2] => sex )
8、in_array -- 检查数组中是否存在某个值 --- 格式:bool in_array(数值对象,array,[, bool $strict
= FALSE
]);
第三个参数:strict
的值为 TRUE
则 in_array() 函数还会检查 needle
的类型是否和 haystack
中的相同。
9、array_search — 在数组中搜索给定的值,如果成功则返回相应的键名 格式:mixed array_search ( mixed $needle
, array $haystack
[, bool $strict
= false ] )
<?php $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red'); $key = array_search('green', $array); // $key = 2; $key = array_search('red', $array); // $key = 1; ?>
10、array_key_exists — 检查给定的键名或索引是否存在于数组中
11、array_flip — 交换数组中的键和值
12、count — 计算数组中的单元数目或对象中的属性个数 格式:int count ( mixed $var
[, int $mode
= COUNT_NORMAL ] )
13、array_count_values — 统计数组中所有的值出现的次数
14、array_unique — 移除数组中重复的值
15、array_filter — 用回调函数过滤数组中的单元
$arr = array(1,2,3,-4,false,6,5,7,8,"",-1,-2,-4,null,0); var_dump(array_filter($arr));//默认去掉值为false的值 function myfun($value){//去掉小于0数值 if ($value >= 0) { return true; }else{ return false; } } var_dump(array_filter($arr, "myfun")); //匿名函数 array_values()重置数组 var_dump(array_values(array_filter($arr, function($value){ return $value%2 == 0; })));
16、array_walk — 使用用户自定义函数对数组中的每个元素做回调处理 格式:bool array_walk ( array &$array
, callable $funcname
[, mixed $userdata
= NULL
] )
17、array_map — 将回调函数作用到给定数组的单元上 格式:array array_map ( callable $callback
, array $arr1
[, array $...
] )
18、array_slice — 从数组中取出一段 格式:array array_slice ( array $array
, int $offset
[, int $length
= NULL
[, bool $preserve_keys
= false ]] )
19、array_merge — 合并一个或多个数组 格式:array array_merge ( array $array1
[, array $...
] )
20、array_intersect — 计算数组的交集(键名不保留) 格式:array array_intersect ( array $array1
, array $array2
[, array $ ...
] )
21、array_diff — 计算数组的差集(键名不保留) 格式:array array_diff ( array $array1
, array $array2
[, array $...
] )
22、array_push — 将一个或多个单元压入数组的末尾(入栈) 格式:int array_push ( array &$array
, mixed $var
[, mixed $...
] )
23、array_pop — 将数组最后一个单元弹出(出栈) 格式:mixed array_pop ( array &$array
)
24、array_unshift — 在数组开头插入一个或多个单元(队列) 格式:int array_unshift ( array &$array
, mixed $var
[, mixed $...
] )
25、array_shift — 将数组开头的单元移出数组 (队列) 格式:mixed array_shift ( array &$array
)
26、array_rand — 从数组中随机取出一个或多个单元 格式:mixed array_rand ( array $input
[, int $num_req
= 1 ] )
27、shuffle — 将数组打乱 格式:bool shuffle ( array &$array
)
28、range — 建立一个包含指定范围单元的数组 格式:array range ( mixed $start
, mixed $limit
[, number $step
= 1 ] )
29、array_fill — 用给定的值填充数组 格式:array array_fill ( int $start_index
, int $num
, mixed $value
)
六、排序
1、ksort — 对数组按照键名排序;krsort ( 降序 )
2、asort — 对数组进行排序并保持索引关系(关联数据排序) 语法:bool asort ( array &$array
[, int $sort_flags
= SORT_REGULAR ] )
3、natsort — 用"自然排序"算法对数组排序,默认区分大小写(natcasesort:不区分大小写) 语法: bool natsort ( array &$array
)
本函数实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为"自然排序"。