PHP之路 PHP基础【第四篇】数组

数组的分类

在PHP中有两种数组:索引数组和关联数组。
	索引(indexed)数组的索引值是整数,以0开始。当通过位置来标识东西时用索引数组。
	关联(associative)数组以字符串做为索引值,关联数组更像操作表。索引值为列名,用于访问列的数据

数组的定义

直接赋值

<?php
header("Content-Type: text/html;charset=utf-8");

//数组的定义方式之一:直接赋值方式

//通过指定数组下标来定义索引式数组
$a[0]=10;
$a[1]=20;
$a[2]=30;
$a[5]=40; //php的数组下标可以不连续
$a[2]=60; //下标重复称修改值

print_r($a);
//Array ( [0] => 10 [1] => 20 [2] => 60 [5] => 40 ) 
echo "<hr/>";

//不指定数组下标来去定义数组(默认数组下标从0开始自增)索引式数组。
$b[]=10;
$b[]=20;
$b[10]=40;
$b[]=30;
//不指定数组下标时,数组的下标值默认最大值加1。
print_r($b);
//Array ( [0] => 10 [1] => 20 [10] => 40 [11] => 30 ) 

echo  "<hr/>";
//关联数组的直接赋值
$stu['name']="张三";
$stu['sex']="男";
$stu['age']=20;
$stu[]=100; //默认下标从0开始
print_r($stu);
//Array ( [name] => 张三 [sex] => 男 [age] => 20 [0] => 100 )

echo "<hr/>";

//循环1到10的值,并放到一个数组c中
for($i=1;$i<=10;$i++){
    $c[]=$i;
}
print_r($c);
View Code

array()

<?php
header("Content-Type: text/html;charset=utf-8");
//使用array()语言结构定义数组

//1. 使用array()不指定下标方式定义一个索引式数组
$a = array(10,20,30,40);
print_r($a);

echo "<hr/>";

//2. 使用array()指定下标来定义一个索引式数组
$b = array(0=>10,1=>20,2=>30,3=>40);
print_r($b);

echo "<hr/>";

//3. 使用array()定义关联式数组
$stu = array("name"=>"张三","sex"=>"男","age"=>20);
print_r($stu);
View Code
<?php
//数组的定义:使用array()语言结构定义数组

//真实网站中的数据格式
$list = array(
            array("name"=>"诺基亚8100","price"=>1280.00,"num"=>20),
            array("name"=>"三星n8","price"=>2200.00,"num"=>30),
            array("name"=>"苹果6","price"=>5288.00,"num"=>10),
        );
echo "<pre>";
print_r($list);

/*
//使用array定义多维数组
$a =array(
       0=>array(10,20,30),
       1=>array(40,50,60)
    );
echo "<pre>";
print_r($a);
echo $a[0][1]; //20;
echo $a[1][1]; //50
echo $a[1][2]; //60
*/

/*
//使用array不指定下标定义一个默认下标的索引式数组。
$a = array(10,20,30,40,50);

//使用array自定索引式下标定义数组。
$b = array(0=>10,1=>20,2=>30);

//使用array定义一个关联式数组。
$c = array("a"=>"AA","b"=>"BB","c"=>"CC");
*/
View Code

快捷方式

<?php
header("Content-Type: text/html;charset=utf-8");
//第三种定义数组方式:使用快捷方式

//不指定下标定义数组
$a=[10,20,30,40];
print_r($a);

echo "<hr/>";

//指定下标定义数组
$stu = ['name'=>'zhangsan','sex'=>'man','age'=>20];
print_r($stu);
View Code

快速创建数组

<?php
echo '<pre>';
//快速创建数组
//快速创建下标连续的索引数组
$arr=range(1,10);
print_r($arr);
$arr=range(-10,5);
print_r($arr);
//手动指定步长的数组
$arr=range(1,10,2);
print_r($arr);
echo '<hr/>';
$arr=range('a','z');//97~122
print_r($arr);
echo '<hr/>';
for($i=97;$i<=122;$i++){
  $arr1[]=chr($i);
}
print_r($arr1);
echo '<hr/>';
//快速创建关联数组
$username='king';
$age=12;
$email='382771946@qq.com';
$userInfo1=array(
  'username'=>$username,
  'age'=>$age,
  'email'=>$email
);
print_r($userInfo1);

$userInfo2['username']=$username;
$userInfo2['age']=$age;
$userInfo2['email']=$email;
print_r($userInfo2);
//注意,通过compact创建数组的时候,只能写已经存在的变量的名称,不需要加$
$a=12;
$b=false;
$c=null;
$userInfo3=compact('username','age','email','a','b','c');
print_r($userInfo3);
View Code

常量数组

<?php
//定义常量数组
//const在5.6之后可以定义常量
const ARR1=array('a','b','c');
print_r(ARR1);
const ARR2=[
  'a'=>'aa',
  'b'=>'bb'
];
print_r(ARR2);
echo '<hr/>';
//通过define()定义常量数组
define('TEST1',array('a','b','c'));
print_r(TEST1);
define('TEST2',['d','e','f']);
print_r(TEST2);

define('CUSTOM_UPLOAD_ERRORS',[
  'ext_error'=>'上传文件扩展名不符合规范',
  'maxsize_error'=>'上传文件大小不符合规范'
]);
print_r(CUSTOM_UPLOAD_ERRORS);
echo '<hr/>';
echo CUSTOM_UPLOAD_ERRORS['ext_error'];
View Code

数组操作

<?php
header('content-type:text/html;charset=utf-8');
echo '<pre>';
//数组使用--查找元素
$arr=['a','b','c','d'];
print_r($arr);
echo $arr[2];
echo '<br/>';
$res=$arr[0];
echo $res;
echo '<br/>';
$arr=[
  'username'=>'king',
  'age'=>12,
  'email'=>'382771946@qq.com'
];
echo '用户名为:',$arr['username'],'<br/>';
echo '年龄:',$arr['age'],'<br/>';
echo '邮箱:',$arr['email'],'<br/>';
//二维的索引+关联
echo '<hr/>';
$users[]=['id'=>1,'username'=>'king1','age'=>21];
$users[]=['id'=>2,'username'=>'king2','age'=>51];
$users[]=['id'=>3,'username'=>'king3','age'=>11];
print_r($users);
echo $users[1]['username'];
echo '<hr/>';
echo $users[2]['age'];
echo '<br/>';
echo $users{2}{'age'};
echo '<hr/>';
//向数组中添加元素
$arr=['a','b','c'];
$arr[]='d';
$arr['test']='this is a test';
$arr[56]='hello world';
$arr[0]='aaaa';
print_r($arr);
//更新操作
$arr[3]='dddd';
print_r($arr);
//删除指定元素
unset($arr['test']);
print_r($arr);
unset($arr[56]);
print_r($arr);
echo '<hr/>';
//针对于二维数组的操作:增删改查操作
$courses[]=['id'=>1,'courseName'=>'php','courseDesc'=>'PHP是最好的语言'];
$courses[]=['id'=>2,'courseName'=>'javascript','courseDesc'=>'javascript是最好的语言'];
$courses[]=['id'=>3,'courseName'=>'go','courseDesc'=>'go是最好的语言'];
print_r($courses);
echo $courses[0]['courseName'],'--',$courses[0]['courseDesc'],'<br/>';
$courses[1]['courseName']='js';
echo $courses[1]['courseName'],'<br/>';
unset($courses[2]['courseName']);
print_r($courses);
unset($courses[1]);
print_r($courses);
echo '<hr/>';
function test(){
  return ['a','b','c'];
}
$res=test();
echo $res[1];
echo '<br/>';
echo test()[1];































echo '</pre>';
数组的增删改查

数组遍历

for循环 

<?php
header("Content-Type: text/html;charset=utf-8");

//数组的遍历方式1:使用for循环
 //其中遍历也叫迭代,就是循环一遍,一个不漏地访问一遍。
 
 $a = array(10,20,30,40,50);
 
 //使用count获取数组长度
 echo "数组长度:".count($a)."<br/>";
 //使用for循环遍历
 for($i=0,$w=count($a);$i<$w;$i++){
    echo $a[$i]." "; //输出下标对应的数组值
 }
View Code

foreach

<?php
header("Content-Type: text/html;charset=utf-8");

//使用foreach()对数组的遍历。

$a=array(10,20,30,6=>40,50);

//不带下标的数组遍历输出
foreach($a as $v){
    echo $v." ";
}

echo "<hr/>";

//带下标的数组遍历输出
foreach($a as $k=>$v){
    echo $k."=>".$v."<br/>";
}

$arr=array("one"=>"aaa", "two"=>"bbb", "three"=>"cccc");
  while($sz=each($arr)){
    //echo $sz[0]."===>".$sz[1]."<br>";
    echo $sz["key"]."===>".$sz["value"]."<br>";    
  }
View Code

 

超全局数组

$GLOBALS 包含以下所有信息
$_SERVER 服务器和执行环境信息
$_GET  通过 URL 参数传递给当前脚本的变量的数组。 
$_POST 通过 HTTP POST 方法传递给当前脚本的变量的数组。
$_FILES 保存文件上传信息(在文件处理章节中细讲)
(cookie和session在会话跟踪章节中细讲)
$_COOKIE 通过 HTTP Cookies 方式传递给当前脚本的变量的数组(用于储存论坛、文库、博客等登陆信息)
$_SESSION 当前脚本可用 SESSION 变量的数组。(用于网站购物车等的信息存储)
$_REQUEST 包含get、post和cookie
$_ENV 存储的是系统环境变量信息

 $_SERVER["HTTP_REFERER"]--上一页面的url地址
 $_SERVER["SERVER_NAME"]--服务器的主机名
 $_SERVER["SERVER_ADDR"]--服务器端的IP地址
 $_SERVER["SERVER_PORT"]--服务器端的端口
 $_SERVER["REMOTE_ADDR"]--客户端的IP
 $_SERVER["DOCUMENT_ROOT"]--服务器的web目录路径
 $_SERVER["REQUEST_URI"];//--URL地址
 echo $_GET["name"];
 echo $_REQUEST["name"]; //获取信息比上面get的会慢一些

 form表单的get提交方式:url地址可见,相对不安全,长度受限,可以做为标签连接使用。
 form表单的post提交方式:url地址不可见,相对安全,长度不受限。

 

<?php
header("Content-Type: text/html;charset=utf-8");
//超全局数组:$_SERVER;

echo "客户端的IP地址:".$_SERVER['REMOTE_ADDR']."<br/>";
echo "客户端的浏览器信息:".$_SERVER['HTTP_USER_AGENT']."<br/>";
echo "服务器端的IP地址:".$_SERVER['SERVER_ADDR']."<br/>";
echo "WEB根目录:".$_SERVER['DOCUMENT_ROOT']."<br/>";
echo "当前URL地址:".$_SERVER['REQUEST_URI']."<br/>";


echo "<pre>";
print_r($_SERVER);
echo "</pre>";

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>我的HTML文档</title>
    </head>
    <body>
        <h3>form表单get提交</h3>
        <form action="1.php" method="get">
            姓名:<input type="text" name="name"/><br/><br/>
            年龄:<input type="text" name="age"/><br/><br/>
           <input type="submit" value="提交"/>
        </form>
        <br/><br/>
        <h3>form表单post提交</h3>
        <form action="1.php" method="post">
            姓名:<input type="text" name="name"/><br/><br/>
            年龄:<input type="text" name="age"/><br/><br/>
           <input type="submit" value="提交"/>
        </form>
    </body>
</html>
form.html
<?php
header("Content-Type: text/html;charset=utf-8");
//超全局数组:$_ENV,$_GET,$_POST,$_REQUEST;

//print_r($_ENV); //在php5.2.6可用

echo "_GET获取信息:<br/>";
echo "姓名:".$_GET['name']."<br/>";
echo "年龄:".$_GET['age']."<br/>";

echo "<hr/>";

echo "_POST获取信息:<br/>";
echo "姓名:".$_POST['name']."<br/>";
echo "年龄:".$_POST['age']."<br/>";

echo "<hr/>";

echo "_REQUEST获取信息:<br/>";
echo "姓名:".$_REQUEST['name']."<br/>";
echo "年龄:".$_REQUEST['age']."<br/>";

echo "<hr/>";
echo "<h3>GLOBALS信息</h3>";
echo "<pre>";
print_r($GLOBALS);
1.php

 

 

 

数组的相关函数 

数组的键和值 

array_values — 返回数组中所有的值
array_keys — 返回数组中所有的键名
array_flip — 交换数组中的键和值
in_array — 检查数组中是否存在某个值
array_reverse — 返回一个单元顺序相反的数组
is_array() --判断是否是数组

数组的统计

count -- 计算数组中的单元数目或对象中的属性个数
array_count_values -- 统计数组中所有的值出现的次数
array_unique -- 移除数组中重复的值

带回调函数

array_filter --  用回调函数过滤数组中的单元 	
array_walk -- 对数组中的每个成员应用用户函数
array_map --  将回调函数作用到给定数组的单元上 

排序  

sort -- 对数组排序(升序)
rsort -- 对数组逆向排序(降序)
asort -- 对数组进行排序并保持索引关系(关联数组排序)
arsort --  对数组进行逆向排序并保持索引关系 
usort --  使用用户自定义的比较函数对数组中的值进行排序
uasort --  使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
ksort -- 对数组按照键名排序
krsort -- 对数组按照键名逆向排序
uksort --  使用用户自定义的比较函数对数组中的键名进行排序
natsort --  用“自然排序”算法对数组排序
natcasesort --  用“自然排序”算法对数组进行不区分大小写字母的排序 
array_multisort -- 对多个数组或多维数组进行排序(了解)

array_slice -- 从数组中取出一段
array_splice --  把数组中的一部分去掉并用其它值取代 
array_combine --  创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 
array_merge -- 合并一个或多个数组
array_intersect -- 计算数组的交集
array_diff -- 计算数组的差集

  

<?php
//php数组的排序:--普通排序

$a=array(10,30,20,50,40);

echo "排序前:";
print_r($a);

//sort($a); //升序, 重组数组下标。
//rsort($a); //降序, 重组数组下标。

//asort($a); //升序, 保持原有数组下标。
arsort($a); //降序, 保持原有数组下标。

echo "<hr/>";
echo "排序后:";
print_r($a);
普通排序
<?php
//php数组的排序:-- 自定义排序

$list = array(
            array("name"=>"zhangsan","age"=>20),
            array("name"=>"lisi","age"=>22),
            array("name"=>"wangwu","age"=>21),
            array("name"=>"zhaoliu","age"=>24),
            array("name"=>"tianqi","age"=>19),
       );
echo "<pre>";
echo "排序前:";
print_r($list);

//自定义排序(按年龄从大到小排序)
usort($list,function($v1,$v2){
                if($v1['age']<$v2['age']){
                    return 1;
                }else{
                    return -1;
                }
            });


echo "<hr/>";
echo "排序后:";
print_r($list);
自定义排序
<?php
//数组的提取,拆分和组合操作
/*
    array_slice -- 从数组中取出一段
    array_splice --  把数组中的一部分去掉并用其它值取代 
    array_combine --  创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 
    *array_merge -- 合并一个或多个数组
*/

$a = array("a"=>"AA","b"=>"BB","c"=>"CC","d"=>"DD","e"=>"EE");

//要求从上面数组中取出 BB CC 和DD单元
$b = array_slice($a,1,3);

print_r($b);

echo "<hr/>";


//将上面a数组中的BB,CC 单元换成 10,20,30。
$b = array_splice($a,1,2,array(10,20,30));
echo "替换后:";
print_r($a);
echo "<br/>";
echo "换掉的内容:";
print_r($b);
提取,拆分和组合
<?php
//数组的提取,拆分和组合操作
/*
    array_slice -- 从数组中取出一段
    array_splice --  把数组中的一部分去掉并用其它值取代 
    array_combine --  创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 
    *array_merge -- 合并一个或多个数组
*/
//合并数组
$a=array("a","b","c");
$b=array(100,200,300);

//使用array_combine()合并出一个新数组
$c = array_combine($a,$b); //注意:a和b参数数组长度必须一致
//将a参数作为键,将b数组参数作为值合并出一个新数组
print_r($c);

echo "<hr/>";


//使用array_merge 合并数组
$c = array_merge($a,$b); //将参数数组首尾相连合并出新数组
print_r($c);
提取,拆分和组合2
<?php
//数组的交集和差集
$a=array(10,20,30,40,50,60);
$b=array(30,50,60,70,80);

//计算数组a和b的交集
$c = array_intersect($a,$b);
print_r($c);

echo "<hr/>";

//计算数组a和b的差集
$c = array_diff($a,$b);//找出a数组中有的,b数组中没有的。
print_r($c);
交集和差集

 

  

  

 

 

  

  

  

 

 

 

 

 

 

 

  

 

posted @ 2019-10-05 10:36  沐风先生  阅读(209)  评论(0)    收藏  举报