Php(五)--数组,php--数组
Php(五)—数组
数组的类型
php中有两种类型的数组,即索引数组和关联数组.索引数组键由数字组成,(默认为索引数组),关联数组由字符串和数字混合组成.
- 关联数组
array2 = array(1=>”foo”,2=>”bar”);
$a = array("foo1","foo2","foo3");
$b = array("a","b",6=>"c","");
var_dump($a);
var_dump($b);
输出结果:array(3) {
[0]=>
string(4) "foo1"
[1]=>
string(4) "foo2"
[2]=>
string(4) "foo3"
}
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
创建数组
除了上节所示的,还有:
$arr["a"] = "red";
$arr["b"] = "orange";
var_dump($arr);
$arr2 = ["dog","cat","wolf"];
var_dump($arr2);
$arr3[] = "a";
$arr3[] = "b";
var_dump($arr3);
还可以使用range()来建立一个指定范围单元的数组
array range(mixed limit [,number $step]);
step:单元之间的步进值;
$a = range(0,6,2);
$b = range("a","g");
print_r($a);
print_r($b);
输出结果:Array
(
[0] => 0
[1] => 2
[2] => 4
[3] => 6
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
[6] => g
)
二维数组
$person = array("jack"=>array("age"=>20,"weight"=>"50kg"),
"Tom"=>array("age"=>19,"weight"=>"45kg")
);
print_r($person);
多维数组
$arr = array("安徽"=>array("宿州"=>array("埇桥区","灵璧县"),
"合肥"=>array("蜀山区","肥东")),
"河南"=>array(",,"=>array(",,",",,"),
",,"=>array(",,",",,"))
);
print_r($arr);
检查数组中是否存在某个值
bool in_array(mixed haystack [,bool $strict = FALSE])
说明: 如果没有设置strict,就使用宽松的比较.如果设为true,就还会检查类型是否相同.
注意: in_array()函数只能在当前维度数组中检查是否存在某个元素.
$arr = array("安徽"=>array("宿州"=>array("埇桥区","灵璧县"),
"合肥"=>array("蜀山区","肥东")),
"河南"=>array(",,"=>array(",,",",,"),
",,"=>array(",,",",,"))
);
var_dump(in_array("合肥",$arr));
$arr2 = ["red","green","blue"];
var_dump(in_array('green',$arr2));
输出结果:bool(false)
bool(true)
数组转换为字符串
string implode(string pieces)
glue:分割符
$arr2 = ["red","green","blue"];
$string = implode("-",$arr2);
echo $string;
输出结果:red-green-blue
计算数组中的单元数目
int count(mixed mode = COUNT_NORMAL])
$person = array("jack"=>array("age"=>20,"weight"=>"50kg"),
"Tom"=>array("age"=>19,"weight"=>"45kg")
);
echo count($person)." ";
echo count($person,1);
输出结果:2 6
数组当前单元和数组指针
$food = ["orange","banana","apple"];
echo current($food)." ";//指针指向当前单元
echo next($food)." ";//指针向下移
echo prev($food)." ";//指针向前移
echo end($food)." ";//指针指向最后一位
echo reset($food);//重置指针,指向第一位
输出结果:orange banana orange apple orange
数组中的键名和值
从关联数组中取得键名
使用key()函数可以从关联数组中返回键名
$fruits = ['fruit1'=>'apple','fruit2'=>'orange ','fruit3'=>'grape','fruit4'=>'apple'];
for ($i=0;$i<count($fruits);$i++){
echo key($fruits)."<br/>";
next($fruits);//将数组指针向后移
}
检查给定键名或索引是否存在于数组中
使用array_key_exists()函数检查给定键名或索引是否存在于数组中
if(array_key_exists("fruit1",$fruits)){//检测数组中是否存在键fruit1
echo "exist";
}
获取数组中部分或所有的键名
使用array_keys()函数可获得数组中部分或所有键名
print_r(array_keys($fruits));//返回所有的key
print_r(array_keys($fruits,"apple"));//判断时,是使用严格的"==="
获取数组中所有的值
使用array_values()函数课获得数组中所有的值
print_r(array_values($fruits));
搜索给定值返回键名
使用array_search()可以在数组中搜索给定的值,如果成功就返回首次出现相应的键名.如果想返回所有匹配的值,应该使用array_keys();
$key=array_search("apple",$fruits);
echo $key;
填补数组
1.array_pad()
可用值将数组填补到指定长度,返回数组的一个备份,如果小于原本的数组长度,则不填补.
$result = array_pad($fruits,6,1);//从数组尾部开始用"1",填补数组到含6个元素.
print_r($result);
$result = array_pad($fruits,-6,1);//从数组首部开始用"1",填补数组到含6个元素.
print_r($result);
输出结果:Array(
[fruit1] => apple
[fruit2] => orange
[fruit3] => grape
[fruit4] => apple
[0] => 1
[1] => 1)
Array(
[0] => 1
[1] => 1
[fruit1] => apple
[fruit2] => orange
[fruit3] => grape
[fruit4] => apple)
2.array_fill()
可以用给定的值填充数组
$a = array_fill(5,2,"banana");//用"banana"填充数组到2个元素,索引键从5开始
print_r($a);
$c = array_fill(-2,3,"pear");//如果是负数,则第二个元素从"0"开始
print_r($c);
输出结果:Array(
[5] => banana
[6] => banana)
Array(
[-2] => pear
[0] => pear
[1] => pear)
3.array_fill_keys()
使用指定的键和值填充数组.
$a = array_fill_keys($keys,"banana");//使用$keys数组的值作为键,banana作为值重新组件一个数组
print_r($a);
输出结果:Array(
[foo] => banana
[5] => banana
[bar] => banana)
从数组中随机取出一个或多个单元
array_rand()函数可以从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键.
$rand_array = array_rand($fruits,2);//从该数组中随机取出两个单元,组成一个新的数组返回.
print_r($rand_array);
数组排序与打乱数组
1.sort()
可以实现对数组的排序,不保持索引关系.
第二个参数是可选参数:
- SORT_REGULAR 正常比较单元;
- SORT_NUMERIC 单元被作为数字来比较;
- SORT_STRING 单元被作为字符串来比较;
- SROT_LOCALE_STRING 根据当前的区域(locale)设置来把单元当作字符串比较,可以用setlocale()来改变;
- SORT_NATURAL 和natsort()类似,对每个单元一”自然的顺序”对字符串进行排序.PHP5.4.0总新增的一个参数;
- SORT_FLAG_CASE 能够与SORT_STRING或SORT_NATURAL合并(“或位运算”),不区分大小写排序字符串.
$fruits = array("lemon","orange","banana","apple");
sort($fruits);
print_r($fruits);
输出结果:Array(
[0] => apple
[1] => banana
[2] => lemon
[3] => orange)
2.asort()
对数组进行排序并保持索引关系
$fruits = array("l"=>"lemon","o"=>"orange","b"=>"banana","a"=>"apple");
asort($fruits);
print_r($fruits);
输出结果:Array(
[a] => apple
[b] => banana
[l] => lemon
[o] => orange)
3.arsort()
对数组进行你想排序并保持索引关系.
$fruits = array("l"=>"lemon","o"=>"orange","b"=>"banana","a"=>"apple");
arsort($fruits);
print_r($fruits);
输出结果:Array(
[o] => orange
[l] => lemon
[b] => banana
[a] => apple)
4.rsort()
对数组进行你想排序,但是不保持索引关系.
5.shuffle()
将数组打乱,但不保持索引关系.
遍历数组
常用for,foreach,each,list对数组进行遍历.
1.for循环便利数组
不改变数组的内部指针.
for ($i = 0;$i<count($fruits);$i++){
echo $fruits[$i]." ";
}
2.foreach遍历数组
foreach ($fruits as $val){
echo $val." ";
}
特别的,在循环内部修改数组,不会对,循环之外访问数组有影响.除非传入的是引用传递(&$val),跟C++里的差不多.
3.each()和list()
each()其实就是让数组指针向后移动.
两者结合:
while (list($key,$val)=each($fruits)){
echo $key."=>".$val." ";
}
输出结果:0=>lemon 1=>orange 2=>banana 3=>apple
也可以使用list()将数组的值分别赋给变量.
$array = array("coffee","brown","caffeine");
list($drink,$color,$power)= $array;
echo $drink." ".$color." ".$power." ";
数组的拆分与合并
1.array_chunk()
将函数分割成多个数组,返回一个多位数组.
三个参数,1.数组,2.分割后每个数组的大小,3.是否保留键名(默认不保留)
$info = array("a","b","c","d");
print_r(array_chunk($info,2));
输出结果:Array(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[0] => c
[1] => d
)
)
2.array_merge()
合并一个或多个数组.
如果输入的数组中有相同的字符串键名,那么该键名后面的值将覆盖前一个值.如果数组包含数字键名,那么后面的值将不会覆盖原来的值,而是附加到后面.
备注:如果想完全保留数组并只想将新的数组附加到后面,就用”+”运算符,连接数组.
增加/删除数组中元素
1.array_unshift()
可在数组开头插入一个或多个单元.
$array = array("orange","banana");
array_unshift($array,"apple","pear");//在头部插入两个.
print_r($array);
输出结果:Array(
[0] => apple
[1] => pear
[2] => orange
[3] => banana)
2.array_shift()
可将数组开头的单元移除数组.
$array = array("orange","banana");
array_unshift($array,"apple","pear");//在头部插入两个.
array_shift($array);//将头部单元移除.
print_r($array);
输出结果:Array(
[0] => pear
[1] => orange
[2] => banana)
3.array_push()
可将一个或多个单元压入数组的末尾(入栈).
$array = array("orange","banana");
array_unshift($array,"apple","pear");//在头部插入两个.
array_shift($array);//将头部单元移除.
array_push($array,"apple");//将"apple"压入数组末尾.
print_r($array);
4.array_pop()
可将数组的最后一个单元弹出(出栈).
其他常用数组函数
1.array_slice()
可以从数组中取出一段,即截取数组.(第二个参数为起始位置,第三个参数为长度,第四个参数为是否重新排序并重置数组的数字索引),特殊情况起始位置为负数,则从末尾开始计数,长度也同样如此.
print_r(array_slice($array,1,-1));
print_r(array_slice($array,1,-1,true));//不改变索引
输出结果:Array(
[0] => orange
[1] => banana)
Array(
[1] => orange
[2] => banana)
2.array_splice()
可以把数组中的一部分去掉并用其他值代替.跟array_slice()相反.
3.is_array()
检测变量是否为数组;如果是,则返回true.
$a = "30";
var_dump(is_array($array));
var_dump(is_array($a));
输出结果:bool(true)
bool(false)
4.array_sum()
可计算数组中所有值的和.注意普通字符串被当作0处理,而数字类型的字符串则会转化为相应的整数型或浮点型.
$a = ['b','2',3,4,'a'];
echo array_sum($a);
输出结果:9
5.array_product()
用来计算数组中所有值的乘积并返回.
6.array_flip()
用来交换数组中的键和值.
系统预定义数组
1.$_SERVER
它是一个包含了诸如头信息(header),路径(path)及脚本位置(script locations)信息的数组,这个数组中的项目有Web服务器创建.不能保证每个服务器都提供全部项目,服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目.
数组元素 | 说明 |
---|---|
$_SERVER[‘PHP_SELF’] | 当前执行脚本的文件名,与document root有关.例如,在地址为http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER[‘PHP_SELF’]将得到/test.php/foo.bar |
$_SERVER[‘SERVER_ADDR’] | 当前运行脚本所在服务器的IP地址 |
$_SERVER[‘SERVER_NAME’] | 当前运行脚本所在服务器的主机名.如果叫啊本运行于虚拟主机中,该名称就由那个虚拟主机所设置的值决定 |
$_SERVER[‘SERVER_PROTOCOL’] | 请求页面时通信协议的名称和版本.例如,”HTTP/1.0” |
$_SERVER[‘REQUEST_METHOD’] | 访问页面使用的请求方法.例如,GET,POST,HEAD,PUT |
$_SERVER[‘DOCUMENT_ROOT’] | 当前运行脚本所在的文档根目录.在服务器配置文件中定义 |
$_SERVER[‘HTTP_ACCEPT_LANGUAGE’] | 当前请求头中Accept-Language:项的内容(如果存在).例如,”en” |
$_SERVER[‘REMOTE_ADDR’] | 浏览当前页面的用户IP地址,注意与$_SERVER[‘SERVER_ADDR’]的区别 |
$_SERVER[‘SCRIPT_FILENAME’] | 当前执行脚本的绝对路径 |
$_SERVER[‘SCRIPT_NAME’] | 包含当前脚本的路径 |
$_SERVER[‘REQUSET_URI’] | URI用来指定要访问的页面,例如.”/index.html” |
$_SERVER[‘PATH_INFO’] | 包含由客户端提供的,跟在真实脚本名称之后并且在查询句(querystring)之前的路径信息(如果存在).例如,当前脚本是通过URL http://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问的,那么$_SERVER[‘SCRIPT_NAME’]将包含 /some/stuff |
$_GET和$POST
get方法所传递的数据将会显示在浏览器的地址栏,而post方法不会.
创建一个index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP处理表单2</title>
</head>
<body>
<center>
<form action="get.php" method="get">
<p>名字: <input type="text" name="fname"></p>
<p>年龄: <input type="text" name="age"></p>
<p> phone: <input type="password" name="phone" ></p>
<p><input type="submit" value="提交"></p>
</form>
</center>
</body>
然后创建get.php文件
echo $_GET['fname'].$_GET['phone'];
这样就可以得到.
$_FILES数组
用于获取通过post方法上传文件的相关信息,如果为单个文件上传,那么该数组为二维数组,如果为多个文件上传,则该数组为三维数组.
$_SESSION和$_COOKIE数组
$_COOKIE[]全局数组存储了通过了HTTP COOKIE传递脚本的信息,PHP可通过setcookie()函数设置COOKIE的值,用$_COOKIE[]数组接收COOKIE的值,$_COOKIE[]数组的索引为COOKIE的名称.
$_SESSION[]数组用于获取会话变量的相关信息.
$_REQUEST[]数组
默认情况下,$_REQUEST[]数组包含了$_GET.$_POST和$_COOKIE的数组.
PHP之友评论