一、数组分类
1.索引数组
索引值为整数的数组
2.关联数组
索引值为字符串的数组,使用字符串作为索引,这使得编程更加人性化!
这在其他编程语言中非常少见,但是在PHP中会被大量的使用在开发过程中,
使用起来极其方便!
二、数组创建
方法一、
变量名称[索引值]=数据;
变量名称[]=数据;//不写索引值默认是 索引数组,从0开始
// 1.索引数组
//创建数组方法一
//$studnet[索引值]=具体的值
$student[0]=10;
$student[1]='声社';
$student[2]=true;
$student[3]=60.5;
$student[10]=30;
//需要使用print_r()函数来输出数组具体内容
//print_r($student);
var_dump($student);
/*创建数组第二种方法*/
//$studnet[]=具体的值
//如果省略索引值不写那么默认索引值就是整数,并且从0开始,一次向上!
$student[]=10;
$student[]='声社';
$student[]=true;
$student[]=60.5;
?>
//上面都是用索引数组下面是关联数组
$student1['num']=10;
$student1['name']='声社';
$student1['sex']=true;
$student1['grade']=60.5;
var_dump($student1);
//使用数组里面具体数据的方法
//数组变量名称[索引值];
echo $student[1];
//这样写更人性化 他的索引值是字符串
方法二、
(1)变量名称=array(
索引值=>数据,
…
);
数据里面还可放数组类型的数据,同一个数组中存储任何类型的数据
(2) s t u d e n t = a r r a y ( 10 , ′ 孙 胜 利 ′ , t r u e , 60.5 ) ; / / 一 维 数 组 v a r d u m p ( student=array(10,'孙胜利',true,60.5);//一维数组 var_dump( student=array(10,′孙胜利′,true,60.5);//一维数组vardump(student);
//索引数组
/*创建数组第二种方法*/
//$student1=array(索引值=>具体的值,......)多个值用,隔开
$student1=array(
0=>10,
1=>'孙胜利',
2=>true,
3=>60.5);
var_dump($student1);
//和上面的一样
//关联数组
$student2=array(
'num'=>10,
'name'=>'孙胜利',
'sex'=>true,
10=>'ddjajjad',//这样写也是可以的
'grade'=>60.5);
var_dump($student2);
2.1.二维数组 ,多维数组
//二维数组 ,多维数组
$students=array(
0=>array(1,'生疏了',true,60.5),
1=>array(2,'生cc',true,80.5),
2=>array(3,'生ff',false,88.5),
);
//$students=array(
//array(1,'生疏了',true,60.5),
//array(2,'生cc',true,80.5),
//array(3,'生ff',false,88.5),
//); //也可以这样写因为它里面默认是索引数组,不是单独的一个数据
var_dump($students);//1个数组里面又有数组
echo $students[0][1];//找'生疏了'
三、数组的遍历
遍历数组:每个都经历一遍的意思
1)for循环
用的比较少,因为有缺陷
//索引数组
/*使用for循环可以遍历数组*/
/*//count(数组[,1])[]代表可选的 返回数组里面数据的个数,还可以获取多维数组的个数
$aar1=array(
array(1,2,3),
array(4,5,6)
);
echo count($arr1);//输出2
echo count($arr1,1);//输出的8 2+6*/
$arr=array(
'a','b','c','d','e','f'
);
//echo count($arr);
for($i=0;$i<count($arr);$i++){
echo Si.'<br/>'
}
//for循环用的比较少,因为有缺陷
//关联数组 不能用for循环了
2)foreach语句来实现遍历数组的目的
foreach(数组变量 as 变量1){
//每次循环执行的语句
变量1代表当前正在经历(访问)的数据
}
遍历的都是一维数组
/*foreach(数组变量 as 变量1){
//数组变量要变量的数组
//大括号里面每次循环执行的语句
// 变量1代表当前正在经历(访问)的数据
}*/
//foreach来遍历数组
//这个比较常用,因为是专门为我们来遍历数组的
/*$arr=array(
'a','b','c','d','e','f'
);
foreach($arr as $value){
echo $value.'<br/>';
}*/
$arr1=array(
'name'=>'孙胜利',
'num'=>10
);
//foreach($arr1 as $value){
// echo $value.'<br/>';
//}
foreach(数组变量 as 变量1=>变量2){
//每次循环执行的语句
变量1代表当前正在经历(访问)的数据的索引值
变量2代表当前正在经历(访问)的数据
}
/*拿到name num这个数组变量*/
foreach($arr1 as $key=>$value){
echo $key.'=>'.$value.'<br/>';
echo count($arr1); //数组长度
}//打印出 name=>孙胜利 //num=>10
/*foreach(数组变量 as 变量1=>变量2){
//每次循环执行的语句
变量1代表当前正在经历(访问)的数据的索引值
变量1代表当前正在经历(访问)的数据
}
*/
遍历二维数组
//以后遇到这种情况再说 递归思想解决
$arr=array(
'a',
'b',
'c',
'd',
array(
1,2,3,4,5 //这个没输出
)
);
foreach($arr as $val){
var_dump($val);
}
//有规律可以直接嵌套遍历就可以了
$arr=array();
array('a','b','c','d'),
array('a','b','c','d','e','f'),
array('a','b','c','d'),
array('a','b','c','d'),
);
foreach($arr as $val1){
foreach($val1 as $val2){
echo $val2.'<br/>';
}
}
<?php
//案例
$arr=array(
array("商品名称","单价","产地","数量","总价"),
array("主板",379,"广东",3,1137),
array("显卡",799,"上海",2,1598),
array("硬盘",589,"北京",5,2945)
);
echo '<h1>商品订货单</h1>';
echo '<table border="1">';
foreach($arr as $val1){
echo "<tr><td>{$val1[0]}</td><td>{$val1[1]}</td><td>{$val1[2]}</td><td>{$val1[3]}</td><td>{$val1[4]}</td></tr>" ;
}
echo '</table>';
?>
四、预定义超全局数组变量
已经定义好了(存在)的变量(存放的数据的类型是数组)。
超全局:超级全局变量,作用域(有效区域)!
传递数据(提交数据)给服务器端主要两种方式
1.get方式
比如:
?参数名=参数值&参数名=参数值…
http://localhost/demo5_3/index.php?参数名=参数值
在服务器端(请求的php文件这边)可以通过$_GET来获取到
$_GET索引值为参数名,索引值对应的数据就是参数值
2.post方式
比如表单 post发送过来的!
可以通过$_POST来获取到!
<?php
var_dump($_GET);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>预定义超全局数据变量</title>
</head>
<body>
<form method="get">
姓名:<input type="text" name='username' /><br />
性别:<input type="text" name='sex' /><br />
<input type="text" name='dwqdwqdqw' />
<input type="submit" value='提交' />
</form>
</body>
</html>
五、处理数组的相关函数
1)array_count_values
$array = array(1, “hello”, 1, “world”, “hello”);
a
r
r
=
a
r
r
a
y
c
o
u
n
t
v
a
l
u
e
s
(
arr=array_count_values(
arr=arraycountvalues(array);//函数返回数组类型的数据
print_r($array);//原来的数组不会受到任何影响
2)array_key_exists
s
e
a
r
c
h
a
r
r
a
y
=
a
r
r
a
y
(
′
f
i
r
s
t
′
=
>
1
,
′
s
e
c
o
n
d
′
=
>
4
)
;
v
a
r
d
u
m
p
(
a
r
r
a
y
k
e
y
e
x
i
s
t
s
(
′
s
e
c
o
n
d
′
,
search_array = array('first' => 1, 'second' => 4); var_dump(array_key_exists('second',
searcharray=array(′first′=>1,′second′=>4);vardump(arraykeyexists(′second′,search_array));
3)array_search
$array = array(0 => ‘blue’, 1 => ‘red’, 2 => ‘green’, 3 => ‘red’,4=>15);
var_dump(array_search(‘15’, $array,true)); //ture如果前面都满足在检查类型,可以不写true
4)count
a
r
r
a
y
=
a
r
r
a
y
(
0
=
>
′
b
l
u
e
′
,
1
=
>
′
r
e
d
′
,
2
=
>
′
g
r
e
e
n
′
,
3
=
>
′
r
e
d
′
,
4
=
>
15
)
;
v
a
r
d
u
m
p
(
c
o
u
n
t
(
array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red',4=>15); var_dump(count(
array=array(0=>′blue′,1=>′red′,2=>′green′,3=>′red′,4=>15);vardump(count(array));
5)in_array
$os = array(“Mac”, “NT”, “Irix”, “Linux”);
var_dump(in_array(‘Mac’, $os));
6)list
a
r
r
=
a
r
r
a
y
(
60
,
80
,
100
)
;
l
i
s
t
(
arr=array(60,80,100); list(
arr=array(60,80,100);list(sunshengli,
x
i
a
o
h
o
n
g
,
xiaohong,
xiaohong,xiaoming)=array(60,80,100);
echo $sunshengli;
7)asort
s
t
u
d
e
n
t
s
=
a
r
r
a
y
(
′
s
u
n
s
h
e
n
g
l
i
′
=
>
60
,
′
l
i
l
e
i
′
=
>
80
,
′
h
a
n
m
e
i
m
e
i
′
=
>
100
,
′
z
h
a
n
g
s
a
n
′
=
>
90
)
;
a
s
o
r
t
(
students=array( 'sunshengli'=>60, 'lilei'=>80, 'hanmeimei'=>100, 'zhangsan'=>90 ); asort(
students=array(′sunshengli′=>60,′lilei′=>80,′hanmeimei′=>100,′zhangsan′=>90);asort(students);
print_r($students);
直接对数组里面的数据进行排序,第二个参数
SORT_REGULAR - 正常比较单元(不改变类型)
SORT_NUMERIC - 单元被作为数字来比较
SORT_STRING - 单元被作为字符串来比较
SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较。
8)array_filter
function odd($var)
{
return($var % 2 == 1);
}
function even($var)
{
return($var % 2 == 0);
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));