PHP08 数组和数据结构

学习要点

  • 数组的分类
  • 数组的定义
  • 数组的遍历
  • 预定义数组
  • 数组的相关处理函数
  • PHP操作数组需要注意的细节

数组的分类

关于PHP数组

  • 由于PHP是弱类型的编程语言,所以PHP数组中的数组变量可以存储任意多个,任意类型的数据,并且可以实现其他语言强类型数据类型的堆、栈、队列等数据结构。
  • PHP中使用数组的目的就是将多个相互关联的数据组织在一起形成集合,作为一个单元进行操作和处理。
  • 员工信息表:

ID


姓名


部门


邮箱


2016001


张三


开发部


[email protected]


2016002


李四


市场部


[email protected]


2016003


王五


行政部


[email protected]


2016004


赵六


销售部


[email protected]

PHP数组的分类

  1. 索引数组:索引是整数值,从0开始,依次递增。用位置来标识数组元素。

数组元素


2016001


张三


开发部


[email protected]


索引


0


1


2


3

  2.关联数组:索引是字符串。通过名称来标识数组元素。


数组元素


2016001


张三


开发部


[email protected]


索引


id


name


deptment


email

数组的定义

直接赋值的方式声明数组

  • 数组中元素的索引值只有一个的数组称为一维数组。
  • 声明一维数组的语法格式:
$数组变量名[下标] = 数据;    //下标指(索引值)可以是整数或者字符串
  • 员工信息声明索引数组和关联数组
//声明索引数组,存储张三的信息

$zhangsan[0]=2016001;

$zhangsan[1]="张三";

$zhangsan[2]="开发部";

$zhangsan[3]="[email protected]";

//声明关联数组,存储李四的信息

$lisi[“id”]=2016002;

$lisi[“name”]="李四";

$lisi[“deptment”]="开发部";

$lisi[“email”]="[email protected]";

ü  索引数组和关联数组访问方式

//通过下标访问索引数组

echo $zhangsan[0];

echo $zhangsan[1];

echo $zhangsan[2];

echo $zhangsan[3];

//通过字符串索引访问管理数组

echo $lisi["id"];

echo $lisi["name"];

echo $lisi["deptment"];

echo $lisi["email"];

  

  • 使用PHP内置函数访问数组
print_r($array) ;      //输出数组中所有的元素和下标值

var_dump($array) ;   //输出数组中所有的元素和下标值,同时输出每个元素的类型

  

  • 索引数组和关联数组混合声明
//索引数组和管理数组混合声明:通过索引或者管理字符串查找元素

$zhangsan[0]=2016001;

$zhangsan["id"]=2016001;

$zhangsan[1]="张三";

$zhangsan["name"]="张三";

$zhangsan[2]="开发部";

$zhangsan["deptment"]="开发部";

$zhangsan[3]="[email protected]";

$zhangsan["email"]="[email protected]";

print_r($zhangsan);

  

  • 默认索引值数组声明
//声明索引数组,存储张三的信息

$zhangsan[]=2016001;

$zhangsan[]="张三";//$zhangsan[12]="张三";索引改变情况

$zhangsan[]="开发部";

$zhangsan[]="[email protected]";

  

使用array()语言结构新建数组

  • array()构建索引数组
$zhangsan1=array(2016001,"张三","开发部","[email protected]");

$zhangsan2=array(1=>2016001,3=>"张三",6=>"开发部",12=>"[email protected]");

  

  • array()构建关联数组
$zhangsan2=array(“id”=>2016001,”name”=>"张三",”deptment”=>"开发部",”email”=>"[email protected]");

  

多维数组的声明

  • PHP数组可以存储PHP所支持的所有数据类型。
  • 如果数组的元素仍为数组,则构成了多维数组。
  • 员工信息表中,一个员工的信息可以放在一个一维数组中;如果员工信息很多,可以考虑把员工信息一维数组放到另外一个数组中,构成二维数组。
  • 二维数组的声明和一维数组一样:直接为数组元素赋值或者使用array()函数声明数组。
//员工信息二维数组:默认数字索引方式

$employees1=array(

      array(2016001,"张三","开发部","[email protected]"),

      array(2016002,"李四","市场部","[email protected]"),

      array(2016003,"王五","行政部","[email protected]"),

      array(2016004,"赵六","销售部","[email protected]")     

);

//员工信息二维数组:指定元素索引方式

$employees1=array(

      "zs" => array(2016001,"张三","开发部","[email protected]"),

      "ls" => array(2016002,"李四","市场部","[email protected]"),

      "ww" => array(2016003,"王五","行政部","[email protected]"),

      "zl" => array(2016004,"赵六","销售部","[email protected]")

);

  

  • 二维数组访问方式:数组都是采用索引访问数组元素。

上机练习1  根据公司提供的各部门员工信息表,构建三维数组


开发部员工信息表


ID


姓名


职位


邮箱


2016001


张三


项目经理


[email protected]


2016002


李四


项目组长


[email protected]


2016003


王五


PHP工程师


[email protected]


2016004


赵六


UI工程师


[email protected]


市场部员工信息表


ID


姓名


职位


邮箱


2016005


小陈


部门经理


[email protected]


2016006


小李


渠道经理


[email protected]


2016007


小赵


客服经理


[email protected]


2016008


小孙


职员


[email protected]


行政部员工信息表


ID


姓名


职位


邮箱


2016009


小刘


总经理


[email protected]


2016010


小高


办公司主任


[email protected]


2016011


小周


行政


[email protected]


2016012


小吴


人事


[email protected]

需求说明:

  • 部门二维数组采用字符串索引;
  • 员工信息一维数组采用数值索引。
  • 输出行政部小高的电子邮箱;输出市场部小赵的职位信息。

数组的遍历

PHP采用数组处理数据,在项目中,大量的数据都是采用PHP内置函数写入数组和读取数组中的元素。一般读取数据采用遍历的方式。

使用for语句循环遍历数组

  • PHP中较少采用for语句遍历数组,因为for循环语句通过下标访问数组中的每个成员元素,因此要求数组的下标是连续的索引数字。所以不适用于不连续下标的索引数组和索引为字符串的关联数组。
  • 演示示例  输出二维数组
//员工信息二维数组:默认数字索引方式

$employees1=array(

      array(2016001,"张三","开发部","[email protected]"),

      array(2016002,"李四","市场部","[email protected]"),

      array(2016003,"王五","行政部","[email protected]"),

      array(2016004,"赵六","销售部","[email protected]")     

);

  

使用foreach语句变量数组

foreach是PHP中专门用来遍历数组的语句。使用foreach遍历数组时与数组的下标无关。每读取一个元素,元素指针后移一位。

第一种语法格式:

foreach ( array_expression  as  $value ) {

    循环体

}

  

示例代码:

//声明一个无序索引数组

$employee=array(3=>2016001,6=>"张三","开发部",6=>"[email protected]");

//使用foreach遍历数组

$count=0;//定义一个计数器,初始化为0

foreach ($employee as $value){

   echo ‘在数组$employee中第‘.$count.‘个元素是:‘.$value.‘<br>‘;

   $count++;

}

  

第二种语法格式:

foreach ( array_expression  as  $key => $value ) {

    循环体

}

  

示例代码:

//声明一个关联数组

$employee=array(‘id‘=>2016001,‘name‘=>"张三",‘dept‘=>"开发部",‘email‘=>"[email protected]");

//使用foreach遍历数组

echo ‘<dl>‘;

foreach ($employee as $key=>$value){

   echo "<dd>$key:$value</dd>";//输出每个元素的键值

}

echo ‘<dl>‘;

  

上机练习2  根据上机练习1构建的三维数组,使用foreach循环遍历数组,并以table表格组织各部门员工信息输出。

提示:三重循环遍历三维数组

foreach(…){//最外层输出三个部门表格

     foreach(…){//遍历每张表格的行

              foreach(…){//遍历每张表格的列

}

}

}

  

联合使用each()、list()和while循环遍历数组

 1.each()

语法格式:

$key => $value each(array_expression)  //参数为数组,返回值是一个键值对

  

示例代码:

//声明一个关联数组

$employee=array(‘id‘=>2016001,‘name‘=>"张三",‘dept‘=>"开发部",‘email‘=>"[email protected]");

//使用each()遍历数组

$id=each($employee);

print_r($id);

//返回值

Array ( [1] => 2016001 [value] => 2016001 [0] => id [key] => id ) //1和value表示数组元素的值,0和key表示数组元素的索引。读取到数组末端,each返回false。

  

2.   list()

  • list()是php的语法结构,非函数。
  • list()只能用于数字索引的数组,并且数字索引从0开始。
  • 用于操作把数组元素的值赋给list()中的变量。

语法格式:

list(mixed varname,mixed varname … ) = array_expression;

  

示例代码:

//声明一个索引数组

$address=array("中国","福建","厦门","软二");

//将数组中元素转换为变量

list($country,$province,$city,$local)=$address;

//输出list中的变量

echo $country.‘-‘.$province.‘-‘.$city.‘-‘.$local;

  

list和each结合使用:

//声明一个关联数组

$employee=array(‘id‘=>2016001,‘name‘=>"张三",‘dept‘=>"开发部",‘email‘=>"[email protected]");

list($key,$value)=each($employee);//将元素下标是0和1的值赋给list;

echo $key.‘=>‘.$value;

  

3. while

采用while循环遍历数组,可以结合list和each,语法格式:

while ( list ( $key,$value ) =  each ( array_expression ) ){

      循环体;

}

  

示例代码:

//声明一个关联数组

$employee=array(‘id‘=>2016001,‘name‘=>"张三",‘dept‘=>"开发部",‘email‘=>"[email protected]");

//输出员工信息

echo ‘<dl><dt>一个员工信息</dt>‘;

while(list($key,$value)=each($employee)){

   echo ‘<dd>‘.$key.‘ : ‘.$value.‘</dd>‘;

}

echo ‘</dl>‘;

  

注意:

  • Foeach循环结束后数组指针重新指向数组第一个元素。
  • Each遍历数组指针会停留在最后一个元素。因此需要reset (array_expression)函数重置数组指针。

4.        使用数组内部指针控制函数遍历数组

PHP提供了一系列操纵数组指针的函数,可以便利访问数组中的元素。


函数


功能描述


current ( )


读取目前指针位置的数据


key ( )


读取目前指针所指向数据的索引值


next ( )


将数组中的内部指针移动到下一个单元


prev ( )


将数组的内部指针倒回一位


end ( )


将数组的内部指针指向最后一个元素


reset()


将目前指针无条件转移到第一个索引位置

示例代码:

// 声明一个一维的关联数组$contact, 使用“=>”运算符指定了每个元素的字符串下标

$contact = array (

      "ID" => 2016001,

      "姓名" => "张三",

      "部门" => "开发部",

      "地址" => "厦门市",

      "电话" => "(0592)98765432",

      "EMAIL" => "[email protected]"

);

// 数组刚声明时,数组指针在数组中第一个元素位置

// 使用key()和current()函数传入数组$contact,返回数组中当前元素的键和值

echo ‘第一个元素:‘ . key ( $contact ) . ‘ => ‘ . current ( $contact ) . ‘<br>‘; // 输出:第一个元素:ID => 1

echo ‘第一个元素:‘ . key ( $contact ) . ‘ => ‘ . current ( $contact ) . ‘<br>‘; // 数组指针没有移动,输出同上

next ( $contact ); // 将数组$contact中的指针向下一个元素移动一次,指向第二个元素的位置

next ( $contact ); // 将数组$contact中的指针向再下一个元素移动一次,指向第三个元素的位置

echo ‘第三个元素:‘ . key ( $contact ) . ‘ => ‘ . current ( $contact ) . ‘<br>‘; // 输出第三个元素的键和值

end ( $contact ); // 再将数组$contact中的指针移动到最后,指向最后一个元素

echo ‘最后一个元素:‘ . key ( $contact ) . ‘ => ‘ . current ( $contact ) . ‘<br>‘; // 输出最后一个元素的键和值

prev ( $contact ); // 将数组$contact中的指针倒回一位,指向最后第二个元素

echo ‘最后第二个元素:‘ . key ( $contact ) . ‘ => ‘ . current ( $contact ) . ‘<br>‘; // 输出最后第二个元素的键和值

reset ( $contact ); // 再将数组$contact中的指针重置到第一个元素的位置,指向第一个元素

echo ‘又回到了第一个元素:‘ . key ( $contact ) . ‘ => ‘ . current ( $contact ) . ‘<br>‘; //输出第一个元素的键和值

  

上机练习3  使用PHP实现冒泡排序,数据保存在数组中。

需求说明:1、定义整数数组,10个数字,实现冒泡排序。2;给定一个整数数字,插入到已排序好的数组中,找到它的位置,输出该位置索引,插入数字。

预定义数组

PHP4.1.0后续版本中,提供了一系列预定义数组,这些数组的变量包含了来自web服务器、客户端、运行环境和用户输入的数据。这些数组也称为自动全局变量或者超全局变量。这些数组特性如下:

  • 是一种特殊的数组,和普通数组操作方式一样。
  • 无需声明,每个PHP脚本默认存在。
  • 在全局范围内生效。在函数中可以直接使用,而无需使用global关键字访问他们。

1.$_SERVER

说明:存储服务器设定相关变量、当前脚本执行环境上下文变量。

例如:获取客户端IP地址

$_SERVER[‘REMOTE_ADDR‘];

  

2.$_ENV

说明:执行环境提交至脚本的变量数组。$_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素。

默认情况下, $_ENV会为空,原因是php的配置文件php.ini的配置项为:variables_order = "GPCS"。如果需要显示内容,则需要修改variables_order = "EGPCS"。EGPCS是Environment、Get、Post、Cookies、Server的缩写。

3.$_GET

说明:在服务器页面中通过$_GET超全局数组获取URL或表单GET方式传递过来的参数。

示例:

信息提交页面代码:

<a href="getAction.php?action=getAction&name=tom&pwd=123">getTest</a>

信息处理页面代码:

print_r($_GET);

  

4.$_POST

说明:通过HTTP POST方法传递的变量组成的数组。获取方式$_POST[‘表单元素name属性值’]。

示例:如何获取CheckBox表单元素的值。

信息提交页面代码:

<form action="getAction.php" method="post">

运动<input type="checkbox" name="like[]" value="sport">

阅读<input type="checkbox" name="like[]" value="read">

电影<input type="checkbox" name="like[]" value="movic">

逛街<input type="checkbox" name="like[]" value="shopping">

电游<input type="checkbox" name="like[]" value="game">

<br>

<input type="submit" value="提交"></form>

信息处理页面代码:

//print_r($_POST);

foreach ($_POST[‘like‘] AS $value){

   echo $value.‘<br>‘;

}

  

5.$_REQUEST

说明:包含了$_POST、$_GET、$_COOKIE中的全部内容。通过$_POST[‘like‘]获取请求值,也可以通过$_REQUEST[‘like’]获取。

缺点:速度慢,不推荐使用。

6.$_FILE

说明:专门章节讲解

7.$_COOKIE

说明:专门章节讲解

8.$_SESSION

说明:专门章节讲解

9.$GLOBALS

说明:由所有已定义的全局变量组成的数组,变量名就是该数组的索引。

函数中可以使用$GLOBALS数组替代global关键字。

上机练习4  表单数据提交处理。

数组的相关处理函数

1.数组键/值操作函数

array_values()

说明:返回数组中所有元素的值,并重建索引。适用于数组中下标混乱的数组,或者可以将关联数组转换为索引数组。

示例:

$contact = array (
		"ID" => 2016001,
		"姓名" => "张三",
		"部门" => "开发部",
		"地址" => "厦门市",
		"电话" => "(0592)98765432",
		"EMAIL" => "[email protected]"
);

print_r(array_values($contact));

  

array_keys()

说明:返回数组中所有的键名。

语法格式:

array array_keys(array,value,strict)

  

如果提供了第二个参数,则只返回键值为该值的键名。

如果 strict 参数指定为 true,则 PHP 会使用全等比较 (===) 来严格检查键值的数据类型。

$contact = array (

     "ID" => 2016001,

     "NAME" => "张三",

     "DEPT" => "开发部",

     "CITY" => "厦门市",

     "TEL" => "(0592)98765432",

     "EMAIL" => "[email protected]"

);

print_r(array_keys($contact));//输出所有KEY

print_r(array_keys($contact,‘张三‘));//输出张三的key

$arr=array(10,20,30,‘10‘);

print_r(array_keys($arr,"10",false));//输出10和“10”的key

print_r(array_keys($arr,"10",true));//输出“10”的key

  

 in_array()

说明:检查数组中是否存在某个值。

语法格式:

array  in_array ( search , array , type )

  

//array_in简单使用形式

$os=array(‘Mac‘,‘NT‘,‘Trix‘,‘Linux‘);

var_dump(in_array("Trix", $os));//true

var_dump(in_array("mac", $os));//true

//array_in严格类型检查

$num=array(‘1.10‘,12.4,1.13);

var_dump(in_array(‘12.4‘, $num,true));//严格检查,输出false

//array_in查询二维数组,search参数也可以为数组

$num=array(array(1,2),‘1.10‘,12.4,1.13);

var_dump(in_array(array(1,2), $num));//true

  

扩展方法:array_search()、array_key_exists()、isset()

array_flip()

说明:交换数组中的键和值,返回反转后的数组。如果一个值出现多次,则最后一个键名作为它的值,覆盖前面出现的元素。如果原来数组中的值的数据类型不是字符串或者整数,函数将报错。

示例:

$lamp = array (

      "OS" => "Linux",

      "WebServer" => "Apache",

      "Database" => "MySQL",

      "Language" => "PHP"

);

print_r ( array_flip ( $lamp ) );

$trans = array ( "a" => 1,"b" => 1,"c" => 2 );

print_r ( array_flip ( $trans ) );

  

 array_reverse()

说明:函数将原数组中的元素顺序翻转,创建新的数组并返回。如果第二个参数指定为 true,则元素的键名保持不变,否则键名将丢失。

语法格式:

2.统计数组元素的个数和唯一性

count()

同sizeof()一样,用来统计数组元素的数目,或者对象中属性的个数。

示例:

$lamp = array("Linux", "Apache", "MySQL", "PHP");

       echo count($lamp); //输出数组的个数为:4

    //声明一个二维数组,统计数组中元素的个数

       $web= array(‘lamp‘  => array(‘Linux‘, ‘Apache‘, ‘MySQL‘,‘PHP‘),  

                 ‘j2ee‘  => array(‘Unix‘, ‘Tomcat‘,‘Oracle‘,‘JSP‘));

       echo count($web, 1);  

//第二个参数的模式为1则计算多维数组的个数,输出10

       echo count($web);    

//默认模式为0,不计算多维数组的个数,输出2

  

array_count_values()

示例:

//声明一个带有重复值的数组

$array = array(1, "php", 1, "mysql", "php"); 

//统计数组$array中所有值出现的次数

$newArray=array_count_values ($array);          

print_r($newArray);                             

//输出:Array([1] => 2 [php] => 2 [mysql] => 1)

  

array_unique()

定义和用法:

array_unique() 函数移除数组中的重复的值,并返回结果数组。

当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。

返回的数组中键名不变。

注释:被保留的数组将保持第一个数组项的键名类型。

示例:

//声明一个带有重复值的数组

$a=array("a"=>"php","b"=>"mysql","c"=>"php");     print_r(array_unique($a));

//删除重复值后输出:Array ([a] => php [b] => mysql)

  

3.使用回调函数处理数组的函数

array_filter()

说明:用回调函数过滤数组中的元素,返回按用户自定义函数过滤后的新数组。

格式说明:

array  array_filter ( array input [, callback callback ] )

第一个参数:被过滤的数组,必选项

第二个参数:用户自定义函数名以字符串形式传入。如果自定义函数返回true,则被操作的数组的当前值就会被包含在返回的结果数组中,并将结果组成一个新数组。如果原数组是关联数组,则键名保持不变。

示例:

//自定义函数myFun,如果参数能被2整除则返回真

function myFun($var){ 

            if($var % 2 == 0)

                   return true;

     }     

//声明值为整数序列的数组

$array = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5); 

//使用函数array_filter()将自定义的函数名以字符串的形式传给第二个参数

print_r(array_filter($array, "myFun"));

//过滤后的结果输出Array ( [b] => 2 [d] => 4 )

  

array_walk()

说明:对数组中的每个元素应用回调函数处理。成功返回true,否则返回false。

语法格式:

Bool array_walk(array &array,callback funname[,mixed userdata])

第一个参数:传入的数组。

第二个参数:回调函数名称字符串。自定义函数接收两个参数,分别是数组元素的的值和键名。

第三个参数:用户自定义变量。

如果自定义函数需要的参数比传入的多,则会报错,采用@或者error_reporting() 函数抑制错误。

如果回调函数需要直接作用于数组中的值,可以将回调函数的第一个参数指定为引用:&$value。

//定义一个回调函数接收两个参数

function myFun1($value,$key) {

//将参数连接在一超输出                  

echo "The key $key has the value $value<br>";   }

//定义一个数组$lamp

$lamp=array("a"=>"Linux","b"=>"Apache","c"=>"Mysql","d"=>"PHP"); 

//使用array_walk函数传入一个数组和一个回调函数

array_walk($lamp,"myFun1");                                        

/*  执行后输出如下结果:

         The key a has the value Linux

         The key b has the value Apache

         The key c has the value MySQL

         The key d has the value PHP */

//自定义一个回调函数需要接受三个参数

function myFun2($value,$key,$p)  {            

//将三个参数连接后输出          

echo "$key $p $value <br>";                     

}

//使用array_walk函数传入三个参数

array_walk($lamp,"myFun2","has the value");          

/*执行后输出如下结果:   

       a has the value Linux

       b has the value Apache

       c has the value MySQL

       d has the value PHP     */

//改变数组元素的值(请注意 &$value传入引用)

function myFun3(&$value,$key) {                

            $value="Web";   //将改变原数组中每个元素的值

     }

//使用array_walk函数传入两个参数,其中第一个参数为引用

array_walk($lamp,"myFun3"); 

print_r($lamp);              

//输出:Array ( [a] => Web [b] => Web [c] => Web [d] => Web )

  

array_map()

array_map()和array_walk()功能相似,但是比array_walk()功能强大,可以处理多个数组。将回调函数作用于给定数组元素上,返回用户自定义函数作用后的数组。

语法格式:

array  array_map ( callback callback , array arr1 [, array …])

  

第一个参数:用户自定义回调函数名称字符串,或者null

第二个参数:输入需要处理的数组,也可以是多个数组。

示例:

//自定义一个函数作为回调函数,接收数组中每个元素做为参数

function myFun1($v) {      

//如果数组中元素的值恒等于MySQL条件成功

if ($v==="MySQL") {                        

return "Oracle";    //返回Oracle

}

return $v; //不等于MySQL的元素都返回传入的值,即原型返回

}

//声明一个有4个元素的数组$lamp

$lamp=array("Linux","Apache","MySQL","PHP");  

//使用array_map()函数传入一个函数名和一个数组参数

print_r(array_map("myFun1",$lamp));  

/*上面程序执行后输出

Array ( [0] => Linux [1] => Apache [2] => Oracle [3] => PHP ) */

//使用多个参数, 回调函数接受的参数数目应该和传递给array_map()函数的数组数目一致

//自定义一个函数需要两个参数,两个数组中的元素依次传入

function myFun2($v1,$v2) {               

if ($v1===$v2) {   //如果两个数组中的元素值相同则条件成功

return "same"; //返回same, 说明两个数组中对应的元素值相同

}

//如果两个数组中对应的元素值不同,返回different

return "different";                  

}

//声明数组$a1,有三个元素

$a1=array("Linux","PHP","MySQL");          

//数组$a第二个元素值和$a中第二个元素的值相同

$a2=array("Unix","PHP","Oracle");           

//使用array_map()函数传入多个数组

print_r(array_map("myFun2",$a1,$a2));     

/*上面程序执行后输出:

Array ( [0] => different [1] => same [2] => different ) */

//当自定义函数名设置为 null 时的情况

$a1=array("Linux","Apache");     //声明一个数组$a1, 有两个元素

$a2=array("MySQL","PHP");      //声明另一个数组$a2,也有两个元素

//通过第一个参数设置为NULL,构造一个数组的数组

print_r(array_map(null,$a1,$a2));         

/*上面程序执行后输出:

Array (        [0] => Array ( [0] => Linux [1] => MySQL )

             [1] => Array ( [0] => Apache [1] => PHP ) ) */

  

4.数组的排序函数


排序函数


说明


sort()


数组的值有小到大排序


rsort()


数组的值由大到小排序


usort()


使用用户自定义的回调函数对数组排序


asort()


对数组有小到大排序,并保持索引关系


arsort()


对数组有大到小排序,并保持索引关系


uasort()


使用用户自定义的回调函数对数组中的值排序并保持索引关系


ksort()


按照键名对数组对数组进行由小到大排序,并保持原来的键


krsort()


按照键名对数组对数组进行由大到小排序,并保持原来的键


uksort()


使用用户自定义的比较回调函数对数组中键名进行排序


natsort()


用自然顺序算法对给定数组中的元素排序


natcasesort()


用不区分大小写的自然顺序算法对给定数组中的元素排序


array_multisort()


对多个数组或多维数组进行排序

上机练习5  查询表格中数组排序函数的用法。

需求说明:

  1. 函数语法格式
  2. 各个参数和返回值说明
  3. 示例代码

5.拆分、合并、分解和接合数组相关函数

array_slice()

array_slice() 函数在数组中根据条件取出一段值,并返回。

array_splice()

array_splice() 函数从数组中移除选定的元素,并用新元素取代它。该函数也将返回包含被移除元素的数组。如果函数没有移除任何元素(length=0),则将从 start 参数的位置插入被替换数组。不保留被替换数组中的键名。

array_splice() 函数与 array_slice() 函数类似,选择数组中的一系列元素,但不返回,而是删除它们并用其它值代替。如果提供了第四个参数,则之前选中的那些元素将被第四个参数指定的数组取代。

最后生成的数组将会返回。

 array_combine()

array_combine() 函数通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值。键名数组和键值数组的元素个数必须相同!

如果其中一个数组为空,或者两个数组的元素个数不同,则该函数返回 false。

array_merge()

把一个或多个数组合并为一个数组。

提示:您可以向函数输入一个或者多个数组。

注释:如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。

注释:如果您仅向 array_merge() 函数输入一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。

提示:该函数与 array_merge_recursive() 函数之间的不同是在处理两个或更多个数组元素有相同的键名的情况。array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。

array_intersect()

array_intersect() 函数用于比较两个(或更多个)数组的键值,并返回交集。

该函数比较两个(或更多个)数组的键值,并返回交集数组,该数组包括了所有在被比较的数组(array1)中,同时也在任何其他参数数组(array2 或 array3 等等)中的键值。

说明:array_intersect() 函数返回两个或多个数组的交集数组。

结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变。

注释:仅有值用于比较。

array_diff()

array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。在返回的数组中,键名保持不变。

6.数组与数据结构

使用数组实现堆栈

堆栈的数据存储特点:后进先出

实现方法:

Array_push():数组最后位置添加元素;

Array_pop():删除最后一个元素;

使用数组实现队列

队列的数据存储特点:先进先出

Array_push():数组最后位置添加元素;

Array_shift():删除数组第一个元素。

其他数组处理函数

  • array_rand()
  • shuffle()
  • array_sum()
  • range()

PHP操作数组需要注意的细节

数组运算符号

  • + 运算符把右边的数组元素(除去键值与左边的数组元素相同的那些元素)附加到左边的数组后面,但是重复的键值不会被覆盖

删除数组中的元素

  • 删除第一个:Array_shift()
  • 删除最后一个:array_pop()
  • 删除任意位置元素:unset[index]。(注意:无法重置索引)

原文地址:https://www.cnblogs.com/rask/p/9016173.html

时间: 2024-11-08 02:19:40

PHP08 数组和数据结构的相关文章

php的数组与数据结构

php编程中30%的地方会用到数组,可见php数组的重要性. php中的数组数组概述--- php是弱类型语言,故数组可存放任意多个,任意类型的数据,且可实现堆,栈,队列等数据结构的功能.数组容量可根据元素个数自动调整. 分类      索引数组---下标是整数,类似大多数语言中的数组.      关联数组---下标是无序不重复的key,映射到对应的value. (一)数组的定义1.直接赋值的方式声明数组    在变量名后面通过方括号“[]”中使用数字声明索引数组,使用字符串声明关联数组.   

PHP系列(三)PHP数组与数据结构

  PHP数组与数据结构 数组是把若干变量按有序的形式组织起来的一种形式. 这些数据元素的集 数组分为一维二维三维.索引数组(数组索引是整数)和关联数组 (1)数组的声明 1.一个数组中存的多个内容.数组中的内容叫作"元素" 2.每个元素都是由健和值组成的Key/value $a=array("one"=>"111","two"=>"2222"); 3.下标有二种类型:一种是整数(索引数组).一

常见的关于数组的数据结构

数据结构有什么用? 集合的各种特点,特色.底层都是数据结构支撑实现的. 常见的数据结构 栈 栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其 他任何位置进行添加.查找.删除等操作.压栈:就是存元素.即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置.弹栈:就是取元素.即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置. 采用该结构的集合,对元素的存取有如下的特点 先进后出(即,存进去的元素,要在后它后面的元素

php学习笔记数组与数据结构1(日期时间函数及遇到的问题解决)

1在PHP中从最简单的数组构建: 1)常用函数: 生成随机数: 1 echo rand(1,10);//两个参数来确定随机数的范围 2 echo rand(10);10//被当成了他的种子,即不能只给一个参数 2的结果是(缺少一个参数) 2)日期时间函数 <?php var_dump(time());//取当前时间的UNIX时间戳 ?> 这样显示的结果: 例:类似于这样(前提是用var_dump()输出返回的值) 正确的方式是 *年份year(四位)用大写的Y,月份month用小写m,天day

巧用javascript数组实现数据结构-堆栈与队列

简单的利用javascript的数组实现数据结构中的堆栈和队列.Stack.js源码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72

PHP基础-数组与数据结构

强类型语言三个特点:1.数组里边只能存储相同数据类型的数据,2.数组的长度固定,3.在内存里边是连续的 一.数组定义及取值 $arr = array(1,2,3,4,5);//echo $arr[0];  //索引数组 $arr1 = array("one"=>"111","two"=>"222");//echo $arr1["one"];   //关联数组 二.遍历数组 1.for循环遍历,只

PHP入门03 -- 数组与数据结构

一.数组 直接赋值声明数组 1.一个数组中存的是多个内容,数组中的内容叫作“元素”: 2.每个元素都是由  键和值  key/value   key下标 $a = array("one"=>"1111", "two"=>"2222"); 3.就是通过 key  使用 值 4.下标有两种类型: 一种是整数(索引数组).一种是字符串(关联数组) 5.[]来操作下标,也可以使用  { }  惊醒互换,建议使用 [ ]  

【数据结构与算法01】数组

数组是应用最广泛的数据存储结构.它被植入到大部分的编程语言中,由于数组十分易懂,所以在这里就不赘述,主要附上两端代码,一个是普通的数组,另一个是有序数组.有序数组是按关键字升序(或降序)排列的,这种排列使快速查找数据项成为可能,即可以使用二分查找. 普通数组的Java代码: public class GeneralArray { private int[] a; private int size; //数组的大小 private int nElem; //数组中有多少项 public Gener

Java数据结构和算法(二)——数组

上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要的数据结构,当然每种语言对数组的实现和处理也不相同,但是本质是都是用来存放数据的的结构,这里我们以Java语言为例,来详细介绍Java语言中数组的用法. 1.Java数组介绍 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型. ①.数组的声明 第一种方式: 数据类型 []