数组
PHP中不需要指定数组大小
- 索引数组
索引为整数的数组
<?php
$student = ["小明",1526,58];
echo $student[3];
echo $student[2];//25
echo $student[1];//1526
echo $student[0];//小明
?>
- 关联数组
索引值为字符串的数组,使用字符串作为索引
<?php
$student["index"] = 98;
echo $student["index"];//98
?>
使用 print_r() 函数输出数组的具体内容
<?php
$student = ["666",96,true,NULL];
echo $student;//Array , 无法显示数组内容
print_r($student);//Array ( [0] => 666 [1] => 96 [2] => 1 [3] => )
?>
数组的声明
使用函数 array() ,声明数组
可以通过设置索引,给数组添加值
<?php
$student = array(666,"2562",852);
$student_1 = array(
"name" => "小明",
"age" => 25,
"class" => 1506,
1 => 9562,
);
print_r($student);//Array ( [0] => 666 [1] => 2562 [2] => 852 )
print_r($student_1);//Array ( [name] => 小明 [age] => 25 [class] => 1506 [1] => 9562 )
?>
直接声明:
当$student[],中括号内不设置值,默认从零开始
<?php
$student = ["666",66598,"false"];
print_r($student);//Array ( [0] => 666 [1] => 66598 [2] => false )
$student[] = "4";
print_r($student);//( [0] => 666 [1] => 66598 [2] => false [3] => 4 )
$student[6] = 5;
print_r($student);//Array ( [0] => 666 [1] => 66598 [2] => false [3] => 4 [6] => 5 )
$student_1 = ["name"=>"小明","age" => 15];
print_r($student_1);// Array ( [name] => 小明 [age] => 15 )
?>
多维数组
-
通过多层嵌套array函数,设置索引
-
使用[ [ ] [ ] ] 嵌套
<?php
$student = ["name"=>"小明","age" => 15,[555,666,777]];
$student_array = array(
"name"=>"小明",
"age" => 15,
array(
0 => 555,
1 => 666,
2 => 777,
)
);
print_r($student);//Array ( [name] => 小明 [age] => 15 [0] => Array ( [0] => 555 [1] => 666 [2] => 777 ) )
print_r($student_array);// Array ( [name] => 小明 [age] => 15 [0] => Array ( [0] => 555 [1] => 666 [2] => 777 ) )
?>
遍历数组
count(数组) 返回数组中数据的个数,还可以获取多维数组的数据的个数
<?php
$student = array(
array(1,2,3),
array(4,5,6,array(
9,
)),
);
$student_1 = [[1,2,3],[4,5,6,[9]]];
echo count($student);//2
echo count($student_1);//2
echo count($student,1);//10 = 2 + 7 + 1,每层数组个数之和,array()也算一个
echo count($student_1,1);//10 = 2 + 7 + 1
?>
for循环
存在问题,当使用字符串作为索引时,无法使用for遍历
<?php
$student = [["小明",25],["小强",26],["小亮",28],["小芳",20]];
for($i = 0 ; $i < count($student); $i++)
{
echo "name:".$student[$i][0].";age:".$student[$i][1]."<br>";
// name:小明;age:25
// name:小强;age:26
// name:小亮;age:28
// name:小芳;age:20
}
?>
foreach遍历
格式一:
foreach( 数组名 as 变量名)
{
//变量名表示现在正在进行的数据
}
例子:
<?php
$student = [["小明",25],["小强",26],["小亮",28],["小芳",20]];
foreach( $student as $good )
{
echo "name:".$good[0].";age:".$good[1]."<br>";
// name:小明;age:25
// name:小强;age:26
// name:小亮;age:28
// name:小芳;age:20
};
$student_1 = array(
"name" => "小明",
"age" => 25,
"class" => 1506,
1 => 9562,
);
foreach($student_1 as $good)
{
echo $good;//小明2515069562
}
?>
格式二:
foreach( 数组名 as $key => $value)
{
//$key 表示索引值
//$value 表示索引值对应的数据
}
$student_1 = array(
"name" => "小明",
"age" => 25,
"class" => 1506,
1 => 9562,
);
foreach($student_1 as $key => $value)
{
echo $key.":".$value."<br>";
// name:小明
// age:25
// class:1506
// 1:9562
}
多维数组foreach遍历
使用嵌套
通常使用递归可以遍历多层数组
<?php
$student = [
'a',
'b',
[1,2,3],
['c','d'],
];
foreach($student as $good)
{
if( (string)($good) == "Array")
{
foreach($good as $array2)
{
echo '('.$array2.')';
}
echo "<br>";
}else{
echo $good."<br>";
}
}
?>
预定义超全局变量
已存在变量,存在的数据类型是数组
超全局变量,作用域为整个脚本
PHP 中存在的超全局变量:
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
传递数据给服务器
- get方式
? 变量名 = 参数值 & 变量名 = 参数值 · · · · ·
http://localhost:2562/PHP/demo1/3.php?
在链接末尾加上 ? ,然后接上需要上传的数据,传递多个数据需要用 & 分隔
例如:
http://localhost:2562/PHP/demo1/3.php?id=1&name=good
在服务器端(请求PHP文件)可以使用 $_GET 获取上传的数据
通过表单上传数据,然后在form表单中添加 method="get" ,来确定上传格式
当提交表单之后,会将数据接到链接地址后面
<form method="get">
用户名:<input type="text" name="username">
性别:<input type="text" name="sex">
<input type="submit" value="提交">
</form>
<?php
var_dump($_GET);array(2); //array(2) { ["username"]=> string(4) "root" ["sex"]=> string(1) "8" }
?>
- post方式
在服务器端(请求PHP文件)可以使用 $_POST 获取上传的数据
<form method="post">
用户名:<input type="text" name="username">
性别:<input type="text" name="sex">
<input type="submit" value="提交">
</form>
<?php
var_dump($_POST);//array(2) { ["username"]=> string(4) "root" ["sex"]=> string(1) "8" }
?>
通过表单上传数据,然后在form表单中添加 method="post" ,来确定上传格式
get 方式 与 post方式相比,post比较安全,get方式数据会显示在浏览器中,存在安全隐患
使用超全局变量
- 使用 $_GET,来获取以 get方式 上传的数据,并以数组格式保存其中,直接链接地址后面加上数据,也可以使用HTML表单
<?php
// http://localhost:2562/PHP/demo1/3.php?id=5&name=good
var_dump($_GET);//array(2) { ["id"]=> string(1) "5" ["name"]=> string(4) "good" }
echo($_GET["id"]);//5
echo($_GET["name"]);//good
?>
- 使用 $_POST,以 post方式 上传的数据,并以数组格式保存其中
常用数组的函数
array_count_values
统计数组中所有的值
array_count_values($array);
返回值:array
返回数组的键是 array 里单元的值; 返回数组的值是 array 单元的值出现的次数。
<?php
$array = [ 5, 25, 6, 3, 5, 6 ];
print_r(array_count_values($array));//Array ( [5] => 2 [25] => 1 [6] => 2 [3] => 1 )
?>
array_key_exists
检查数组里是否有指定的键名或索引
array_key_exists( key , $array);
key 表示 要查找的键,可以为任何能作为索引的值
$array 表示 操作的数组
返回值:bool
<?php
$array = array(
"name" => "Yz",
"class"=>1506,
"id" => 1
);
var_dump (array_key_exists("name",$array));//true
var_dump (array_key_exists("age",$array));//false
?>
array_search
在数组中搜索给定的值,如果成功则返回首个相应的键名
array_search(str,$array);
str 要搜索的值
$array 表示 要操作的数组
返回值:若找到,返回键名,否则返回false
<?php
$array = [
"name" => "Yz",
"age" => 20,
"class" => 1526,
];
echo array_search("Yz",$array);//name
?>
count
计算数组中的元素的个数,或对象中的属性个数
count( $array_or_countable , [$mode] );
$array_or_countable 表示 数组或者 Countable 对象。
$mode 表示 如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数,int
<?php
$student = array(
array(1,2,3),
array(4,5,6,array(
9,
)),
);
$student_1 = [[1,2,3],[4,5,6,[9]]];
echo count($student);//2
echo count($student_1);//2
echo count($student,1);//10 = 2 + 7 + 1,每层数组个数之和,array()也算一个
echo count($student_1,1);//10 = 2 + 7 + 1
?>
返回值:
in_array
检查数组中是否存在某个值
in_array( value , $array , [strict] )
value 表示 要搜索的值
$array 表示 要操作的数组,array
strict 表示 设置为true, 判断value的类型与$array数据的类型是否相同,bool
返回值:bool,找到为true,否则false
<?php
$array = [
"name" => "Yz",
"age" => 20,
"class" => 1526,
];
var_dump( in_array("20",$array));//true
var_dump( in_array("20",$array,true));//false
?>
list
把数组中的值赋给一组变量
list(var1,var2 · · · ·) = $array
<?php
$array = [25 , 15 ,35];
// list($apple,$banana,$orange) = $array;
// echo $apple."元";//25元
list(,,$orange) = $array;
echo $orange."元";//35元
?>
sort()
对数组排序
asort($array,[sort_flags]);
$array 表示 要操作的数组
sort_flags 排序类型标记,如下:
SORT_REGULAR - 正常比较单元(不改变类型)
SORT_NUMERIC - 单元被作为数字来比较
SORT_STRING - 单元被作为字符串来比较
SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
SORT_NATURAL - 和 natsort() 类似对每个单元以“自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。
SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。
返回值:成功时返回 true, 或者在失败时返回 false。
<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val ."\t";
}
//fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange
?>
asort
对数组进行排序并保持索引关系
asort($array,[sort_flags]);
$array 表示 要操作的数组
sort_flags 排序类型标记,如下:
SORT_REGULAR - 正常比较单元(不改变类型)
SORT_NUMERIC - 单元被作为数字来比较
SORT_STRING - 单元被作为字符串来比较
SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
SORT_NATURAL - 和 natsort() 类似对每个单元以“自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。
SORT_FLAG_CASE - 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。
返回值:成功时返回 true, 或者在失败时返回 false。
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
//c = apple b = banana d = lemon a = orange
?>
array_filter
用回调函数过滤数组中的单元
array_filter ( $array [$callback], [$flag] )
$callback 使用的回调函数,若没有提供函数,将删除$array中所有值为false的数据
$flag
决定$callback接收的参数形式:
ARRAY_FILTER_USE_KEY - callback接受键名作为的唯一参数
ARRAY_FILTER_USE_BOTH - callback同时接受键名和键值
返回值:array
<?php
function even($var){
return(!($var & 1));
}
function odd($var){
return($var & 1);
}
$array = [ 1, 3, 5, 7, 9, 12];
print_r(array_filter($array,"even"));// Array ( [5] => 12 )
print_r(array_filter($array,"odd"));// Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 )
?>
数组函数
- array_change_key_case — 将数组中的所有键名修改为全大写或小写
- array_chunk — 将一个数组分割成多个
- array_column — 返回数组中指定的一列
- array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
- array_count_values — 统计数组中所有的值
- array_diff_assoc — 带索引检查计算数组的差集
- array_diff_key — 使用键名比较计算数组的差集
- array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集
- array_diff_ukey — 用回调函数对键名比较计算数组的差集
- array_diff — 计算数组的差集
- array_fill_keys — 使用指定的键和值填充数组
- array_fill — 用给定的值填充数组
- array_filter — 用回调函数过滤数组中的单元
- array_flip — 交换数组中的键和值
- array_intersect_assoc — 带索引检查计算数组的交集
- array_intersect_key — 使用键名比较计算数组的交集
- array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引
- array_intersect_ukey — 用回调函数比较键名来计算数组的交集
- array_intersect — 计算数组的交集
- array_key_exists — 检查数组里是否有指定的键名或索引
- array_key_first — Gets the first key of an array
- array_key_last — Gets the last key of an array
- array_keys — 返回数组中部分的或所有的键名
- array_map — 为数组的每个元素应用回调函数
- array_merge_recursive — 递归地合并一个或多个数组
- array_merge — 合并一个或多个数组
- array_multisort — 对多个数组或多维数组进行排序
- array_pad — 以指定长度将一个值填充进数组
- array_pop — 弹出数组最后一个单元(出栈)
- array_product — 计算数组中所有值的乘积
- array_push — 将一个或多个单元压入数组的末尾(入栈)
- array_rand — 从数组中随机取出一个或多个单元
- array_reduce — 用回调函数迭代地将数组简化为单一的值
- array_replace_recursive — 使用传递的数组递归替换第一个数组的元素
- array_replace — 使用传递的数组替换第一个数组的元素
- array_reverse — 返回单元顺序相反的数组
- array_search — 在数组中搜索给定的值,如果成功则返回首个相应的键名
- array_shift — 将数组开头的单元移出数组
- array_slice — 从数组中取出一段
- array_splice — 去掉数组中的某一部分并用其它值取代
- array_sum — 对数组中所有值求和
- array_udiff_assoc — 带索引检查计算数组的差集,用回调函数比较数据
- array_udiff_uassoc — 带索引检查计算数组的差集,用回调函数比较数据和索引
- array_udiff — 用回调函数比较数据来计算数组的差集
- array_uintersect_assoc — 带索引检查计算数组的交集,用回调函数比较数据
- array_uintersect_uassoc — 带索引检查计算数组的交集,用单独的回调函数比较数据和索引
- array_uintersect — 计算数组的交集,用回调函数比较数据
- array_unique — 移除数组中重复的值
- array_unshift — 在数组开头插入一个或多个单元
- array_values — 返回数组中所有的值
- array_walk_recursive — 对数组中的每个成员递归地应用用户函数
- array_walk — 使用用户自定义函数对数组中的每个元素做回调处理
- array — 新建一个数组
- arsort — 对数组进行逆向排序并保持索引关系
- asort — 对数组进行排序并保持索引关系
- compact — 建立一个数组,包括变量名和它们的值
- count — 计算数组中的单元数目,或对象中的属性个数
- current — 返回数组中的当前单元
- each — 返回数组中当前的键/值对并将数组指针向前移动一步
- end — 将数组的内部指针指向最后一个单元
- extract — 从数组中将变量导入到当前的符号表
- in_array — 检查数组中是否存在某个值
- key_exists — 别名 array_key_exists
- key — 从关联数组中取得键名
- krsort — 对数组按照键名逆向排序
- ksort — 对数组按照键名排序
- list — 把数组中的值赋给一组变量
- natcasesort — 用“自然排序”算法对数组进行不区分大小写字母的排序
- natsort — 用“自然排序”算法对数组排序
- next — 将数组中的内部指针向前移动一位
- pos — current 的别名
- prev — 将数组的内部指针倒回一位
- range — 根据范围创建数组,包含指定的元素
- reset — 将数组的内部指针指向第一个单元
- rsort — 对数组逆向排序
- shuffle — 打乱数组
- sizeof — count 的别名
- sort — 对数组排序
- uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
- uksort — 使用用户自定义的比较函数对数组中的键名进行排序
- usort — 使用用户自定义的比较函数对数组中的值进行排序
网友评论