4.1 初识数组

4.1.1 什么是数组

  数组是一个可以存储一组或者一系列数值的变量。在PHP中,数组中的元素分两部分,分别为键(Key)和值(Value)。其中,“键”为元素的识别名称,也被称为数组下标,“值”为元素的内容。“键”和“值”存在一种对应关系,称为映射。

  1、索引数组

  下标为整数的数组,即数组的“键”为整数,仅仅指示元素在数组中的位置,不表示对应值的含义

  2、关联数组

  下标为字符串的数组,即数组的“键”为字符串,显示时,以元素的添加顺序有关,与下标顺序无关

  3、混合数组

  数组的“键”既有整数,也有字符串的数组

4.1.2 数组的定义

  1、使用赋值方式定义数组

<?php
//**********定义索引数组**********//
//方式1:
$arr1[0]="欧阳华夏";//姓名
$arr1[1]=25;//年龄
$arr1[2]="男";//性别
$arr1[3]=true;//是否单身
echo "<pre>";
print_r($arr1);
echo "</pre>";
/*
输出结果:
Array
(
[0] => 欧阳华夏
[1] => 25
[2] => 男
[3] => 1
)
*/ //方式2:
$arr2[]="欧阳华夏";//姓名
$arr2[]=25;//年龄
$arr2[]="男";//性别
$arr2[]=true;//是否单身
echo "<pre>";
print_r($arr2);
echo "</pre>";
/*
输出结果:
Array
(
[0] => 欧阳华夏
[1] => 25
[2] => 男
[3] => 1
)
*/ //方式3
$arr3=[0=>"欧阳华夏",1=>25,3=>"男",4=>true];
echo "<pre>";
print_r($arr3);
echo "</pre>";
/*
输出结果:
Array
(
[0] => 欧阳华夏
[1] => 25
[2] => 男
[3] => 1
)
*/ //**********定义关联数组**********//
//方式4:
$arr4["name"]="欧阳华夏";//姓名
$arr4["age"]=25;//年龄
$arr4["sex"]="男";//性别
$arr4["is_Single"]=true;//是否单身
echo "<pre>";
print_r($arr4);
echo "</pre>";
/*
输出结果:
Array
(
[name] => 欧阳华夏
[age] => 25
[sex] => 男
[is_Single] => 1
)
*/ //方式5
$arr5=["name"=>"欧阳华夏","age"=>25,"sex"=>"男","is_Single"=>true];
echo "<pre>";
print_r($arr5);
echo "</pre>";
输出结果:
/*
Array
(
[name] => 欧阳华夏
[age] => 25
[sex] => 男
[is_Single] => 1
)
*/
?>

  在上述示例代码中,分别定义了索引数组和关联数组

  ①方式1对应方式4,创建一个数组变量,使用赋值运算符挨个给数组变量赋值

  ②方式2创建数组,赋值时没有指定“键”,使用默认键,即“键”从0开始

  ③方式3对应方式5,在一个“[]”中使用“=>”符号给数组赋值

  

  2、使用array()函数定义数组

  除了通过赋值方式定义数组外,还可以使用array()函数定义数组,它接收数组的元素作为参数,多个元素之间使用英文逗号分隔;

<?php
//**********定义索引数组**********//
//方式1
$arr1=array("欧阳华夏",28,"男",true);
//**********定义关联数组**********//
$arr2=array("name"=>"欧阳华夏","age"=>28,"sex"=>"男","is_Single"=>true);
?>

4.1.3 数组元素的获取

  获取数组中单个元素的值:

  $数组名[键名]

  打印数组的全部值:

<?php
/************************方法1********************************/
echo "<pre>";
print_r("数组名")
echo "</pre>";
/************************方法2********************************/
echo "<pre>";
var_dump("数组名")
echo "</pre>";
?>

  PHP提供了print_r()函数和var_dump(),专门用于输出数组中的所有元素,需要注意一下几点:

  ①print_r()函数只能打印出来数组中的元素

  ②var_dump()函数在打印数组中元素的同时还能打印出元素中值的数据类型

  ③在上述代码中,都有两行echo "<pre>"代码,其中“pre”标签的作用是用格式化文本输出。

4.1.4 删除数组

  PHP中提供了unset()函数用于删除数组的元素,使用规则:

  ①语法: unset(数组名[索引])

  ②删除元素后数组不会重建该元素的索引。即未被删除的元素的索引不会因为删除了元素而改变

  ③可以删除整个数组: unset(数组名)

4.1.5 数组操作符

  数组这种符合类型的数据可以进行运算,数组的运算通过数组操作数实现。见表4-1:

  表4-1 数组操作运算符

运算符

含义

示例

+

联合

$a+$b;$a和$b的联合

==

相等

$a==$b;如果$a和$b具有相同的键值对,则为true

===

全等

$a===$b;如果$a和$b具有相同的键值对且顺序和类型都相同则为true

!=

不等

$a!=$b;如果$a不等于$b,则为true

<>

不等

$a<>$b;如果$a不等于$b,则为true

!==

不全等

$a!===$b;如果$a不全等于$b,则为true

  注:”+“为联合运算符,用于合并数组。如果出现下标相同的元素,则保留第一个数组内的元素。

4.2 数组的常见操作

4.2.1 数组指针

  对数组中的元素进行访问过程中需要用到数组指针。数组指针用于指向数组中的某个元素,默认情况下指向数组的第一个元素。注意:一个数组只有一个数组指针。具体数组指针见表4-2:

表4-2 数组指针操作函数

函数名

作用

mixd current(array $array)

获取数组中当前元素的值,如果内部指针超出数组的末端,则返回false

mixd key(array $array)

获取当前元素的键名

mixd next(array $array)

将数组的内部指针向前移动一位

mixd prev(array $array)

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

mixd end(array $array)

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

mixd reset(array $array)

重置指针,即将数组的指针指向第一个元素

4.2.2 数组遍历

  在PHP中使用foreach语句实现数组的遍历:

  无键名遍历

foreach(数组名 as $Value){
//循环体
}

  键值对遍历

foreach(数组名 as $Key => $Value){
//循环体
}

4.2.3 数组排序----冒泡排序

 <?php
//********************冒泡排序*******************//
$array=[9,8,2,5,3];
/*从小到大
冒泡排序思路:
1、从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,交换位置,整个
过程完成后,数组中最后一个元素就是最大值,这就完成了第一轮比较
2、除了最后一个元素,将剩余的元素进行两两比较,过程与第一步相似,这样就可以将数组中第二大的数放在倒数第二个位置
3、依次类推,持续对元素进行两两比较,直到没有任何一对元素需要比较为止
*/ for($i=0;$i<count($array)-1;$i++){
//最外层循环,控制比较的轮数,很明显,冒泡排序比较轮数=数组长度-1
for($j=0;$j<count($array)-1-$i;$j++){
//里层循环控制相邻的两个数,$j的取值范围要注意,没进行一轮,$j的取值小一次
if($array[$j]>$array[$j+1]){
$temp=$array[$j];
$array[$j]=$array[$j+1];
$array[$j+1]=$temp;
}
}
}

4.2.4 数组元素查找

  1、顺序查找法----------查找一个数组中是否包含数字8,如果包含,返回当前元素的索引,否则返回“查无此数”;

 <?php
//定义数组
$arr=array(,,,,);
//定义函数,查找数字8
function searchIndex($Array,$Value){
for($i=;$i<count($Array);$i++){
if($Array[$i]===$Value){
return $i ;
}
}
return "查无此数";
} $result=searchIndex($arr,);
echo $result;
?>

  2、二分查找法-----查找一个数组中是否包含元素5,如果存在,则输出下标,否则返回“查无此数”

 <?php
//定义数组,
$arr=array(,,,,,,);
//定义函数
function binarySearch($Array,$Value,$Start_index,$End_index){
if($Start_index > $End_index){
return "查无此数";
}
//获取中间元素下标
$Mid_index=round(($Start_index + $End_index)/);
if($Array[$Mid_index] > $Value){//元素在中间元素的左边
//从左边查找
binarySearch($Array,$Value,$Start_index,$Mid_index-);
}else if($Array[$Mid_index] < $Value){//元素在中间元素右边
//从右边查找
binarySearch($Array,$Value,$Mid_index+,$End_index);
}else{//查找元素和中间元素值相同
echo $Mid_index;
}
}
binarySearch($arr,,,count($arr)-);
?>

4.3 数组的常用函数

4.3.1 基本函数

  1、is_array()函数

  is_array()函数的作用是判断一个变量是否是一个数组,如果是数组,返回true,否则返回false。

   bool is_array(mixed $var);

  is_array()函数接受一个mixed类型的变量var,然后判断这个变量是不是数组。

  2、count()函数

  count()函数的作用是用于计算数组中元素的个数。

   int count(mixed $var [,int $mode]);

  在上述声明中,count()函数接收两个参数,其中$var参数是必须的,表示传入的数组对象;$mode参数是可选参数,值为0或者1。
  $mode=0----->只显示一维数组的个数;
  $mode=1----->递归计算多维数组中每个元素的个数;

  示例如下:

 <?php
//一维数组$arr1
$arr1=array("百度","新浪","搜狐","网易","传智");
//输出长度
echo '一维数组$arr1的长度是:' . count($arr1) . "<br/>"; //二维数组
$arr2=array(
'$arr3'=>array("a","b","c","d","e"),
'$arr4'=>array("1","2","3","4","5")
);
//输出长度 //所有元素
echo '$arr2的所有元素的个数:' . count($arr2,1) . "<br/>";//计算二维数组中所有元素的个数,12个
//一维元素
echo '$arr2的一维元素的个数:' . count($arr2) . "<br/>";//计算二维数组中所有一维元素的个数,2个
?>

  3、array_unique()函数

  array_unique()函数的作用是移出数组中的重复元素。

   array array_unique(array $array);

  在上述声明中,array_unique()函数接受一个数组,去除重复元素后返回一个新的数组。在使用该函数时,首先将数组元素的值作为字符串排序,然后对每个值只保留第一个键名,忽略后面所有的键名。

 <?php
$input=array("a"=>"green","red","b"=>"green","blue","red");
echo "<pre>";
print_r($input);
//调用函数
$result=array_unique($input);
print_r($result);
echo "</pre>"; /*运行结果
Array
(
[a] => green
[0] => red
[b] => green
[1] => blue
[2] => red
)
Array
(
[a] => green
[0] => red
[1] => blue
)
*/
?>

4.3.2 键值对的相关函数

  1、array_search()

  array_search()函数用于获取数组中元素对应的键名。

     array array_search(mixed $needle,array $haystack [,bool $strict]);

  在上述声明中,$needle表示在数组中要查找的值,$haystack表示被查询的数组。$strict参数是可选的,当值为true时,就会在$haystack数组中检查$needle的类型。

 <?php
$array=array(0=>"blue",1=>"red",2=>"green",3=>"red");
echo "green对应的键为:";
echo array_search("green",$array);
//结果:green对应的键为:2
?>

  当被查询的元素在数组中出现两次以上时,那么array_search()函数返回第一个匹配的键名。

  2、array_keys()函数

  array_keys()函数同样用于获取数组中元素对应的键名。不同的是,array_keys()函数可以返回所有匹配的键名。

      array array_keys(array $input [,mixed $search_value [,bool $strict]]);

  上述声明中,$input表示要被查询的数组;$search_value参数是可选参数,当给$search_value赋值时,函数返回该值的键名,否则返回$input数组的所有的键名。$strict参数用来进行全等比较,需要传入一个布尔值,默认为false,如果为true则根据类型返回带有指定值的键名。

 <?php
//定义数组arr1
$arr1=array(0=>"ttg","name"=>"dandy");
print_r(array_keys($arr1)); //返回数组中元素的所有键名
//Array ( [0] => 0 [1] => name )
print_r(array_keys($arr1,"dandy")); //获取数组元素为"dandy"对应的键名
// Array ( [0] => name ) //定义数组arr2
$arr2=array(11,12,32,"11");
print_r(array_keys($arr2,11)); //获取元素11(不依赖类型)
//Array ( [0] => 0 [1] => 3 )
print_r(array_keys($arr2,"11",true)); //获取字符串类型的元素的"11"
// Array ( [0] => 3 )
?>

  array_keys()函数可以根据传入的参数,返回不同的键名。当传入的参数是一个数组时,则返回所有的键。当传入一个指定数组中某个元素时,返回该元素对应的键。

4.3.3 排序函数

  PHP提供了多个排序的函数,例如sort()函数、rsort()函数、ksort()函数等。

  以sort()函数为例,讲解数组的排序功能。sort()函数的作用就是对数组中的元素按照从小到大的顺序进行排序。

   bool sort(array $array [,int $sort_flag=sort_regular]);

  在上面的声明中,$array参数表示需要排序的数组,$sort_flag是可选参数,sort()函数会根据$sort_flag的值改变数组的排序方式。$sort_flag的取值如表4-3所示:

  表4-3 $sort_flag的取值范围

取值范围

排序方式

SORT_REGULAR

默认值,将自动识别数组元素的类型进行排序

SORT_NUMERIC

用于数字元素的排序

SORT_STRING

用于字符串元素的排序

SORT_LOCALE_STRING

跟去当前local设置来把元素当作字符串比较

  示例代码:

<?php
$arr=array("4apple","3banana","1orange","2peach");
sort($arr,SORT_NUMERIC);
echo "<pre>";
print_r($arr);
echo "</pre>"; /*运行结果:
Array
(
[0] => 1orange
[1] => 2peach
[2] => 3banana
[3] => 4apple
)
*/
?>

4.3.4 合并和拆分函数

 1、array_merge()函数

  array_merge()函数的作用是合并一个或多个数组。

   array array_merge(array $array1 [,array $...]);  

  array_merge()将一个或者多个数组的单元合并起来,一个数组的值附加在另一个数组的后面,返回一个新的数组。
  ①如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前面的值;
  ②如果数组中包含数字键名,后面的值不会覆盖原来的值,而是附加在数组的后面;
  ③如果数组是数字索引的,则键名会以连续方式重新编排索引。  

 <?php
$array1=array("color"=>"red",2,4);
$array2=array("a","b","color"=>"green","shape"=>"trapezoid",4);
$result=array_merge($array1,$array2);
echo "<pre>";
print_r($result);
echo "</pre>"; /*运行结果:
Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4
)
*/
?>

  2、array_chunk()函数

  函数array_chunk()的作用是将一个数组分割成多个数组。

   array array_chunk(array $input,int $size [,bool $preserve_keys]);   

  上述声明中,$input表示要分割的数组,$size是分割后每个数组中元素的个数,$preserve_keys是一个可选参数。如果将该参数设置为true,则分割后的数组中元素保留原来的索引,如果将该参数设置为false,则分割后数组中的元素的索引将从零开始。

  代码如下: 

 <?php
$arr=array("cctv-a","cctv-b","cctv-c");
//分割数组
echo "<pre>";
echo "分割后的数组为:" . "<br/>";
print_r(array_chunk($arr,2));
echo "</pre>";
/*运行结果:
分割后的数组为:
Array
(
[0] => Array
(
[0] => cctv-a
[1] => cctv-b
) [1] => Array
(
[0] => cctv-c
) )
*/ //第二次分割
echo "<pre>";
echo "分割后的数组为:" . "<br/>";
print_r(array_chunk($arr,2,true));
echo "</pre>";
/*运行结果:
分割后的数组为:
Array
(
[0] => Array
(
[0] => cctv-a
[1] => cctv-b
) [1] => Array
(
[2] => cctv-c
) )
*/
?>

4.3.5 其他函数

  1、array_rand()函数

  array_rand()函数的作用是从数组中随机取出一个或多个元素。

   mixed array_rand(array $input [,int $num_req]);

  array_rand()函数接受一个input参数和一个可选的参数num_req,其中input参数用于指定接受的数组,num_req用于指定取出元素的个数,默认为1。如果只取出一个元素,array_rand()会返回一个随机元素的键名,否则返回一个包含随机键名的数组。

  代码如下:

 <?php
$input=array("科比","姚明","詹姆斯","艾佛森","基德");
echo "<pre>";
echo "随机获取一个元素" . "<br/>";
print_r(array_rand($input));
echo "<br/>";
echo "随机获取两个元素" . "<br/>" ;
print_r(array_rand($input,2));
echo "</pre>"; /*运行结果:
随机获取一个元素
2
随机获取两个元素
Array
(
[0] => 2
[1] => 3
)
*/
?>

  2、array_reverse()

  array_reverse()函数的作用是返回一个元素顺序相反的数组。

   array array_reverse(array $array [,bool $preserve_keys]);

  array_reverse()接受数组array作为输入并返回一个元素为相反顺序的新数组,如果preserve_keys为true,则保留原来的键名。

  代码如下:

 <?php
$input=array("ibim",122,array("dell","apple"));
$result=array_reverse($input);
echo "<pre>";
print_r($result);
echo "</pre>";
/*运行结果:
Array
(
[0] => Array
(
[0] => dell
[1] => apple
) [1] => 122
[2] => ibim
)
键名被修改
*/
$result_keyed=array_reverse($input,true);
echo "<pre>";
print_r($result_keyed);
echo "</pre>";
/*运行结果:
Array
(
[2] => Array
(
[0] => dell
[1] => apple
) [1] => 122
[0] => ibim
)
键名保留不会修改
*/
?>

PHP-----PHP程序设计基础教程----第四章数组的更多相关文章

  1. PHP-----PHP程序设计基础教程----第三章函数

    3.1 初识函数 3.1.1 函数的定义 语法: function 函数名([参数1,参数2,......]) { 函数体 } (1)function:在声明函数时必须使用的关键字 (2)函数名:创建 ...

  2. 【Java】《Java程序设计基础教程》第一章学习

    一.Java概述 1.介绍了Java语言的由来 2.Java语言的特点:简单.面向对象.分布式.高效解释执行.健壮.安全.结构中立.可移植.高效率.多线程.动态 3.Java语言的实现机制,引入虚拟机 ...

  3. 【Java】《Java程序设计基础教程》第二章学习

    一.标识符 Java 中标识符的使用有如下规定:(1)标识符由字母.数字.美元符号”$”和下划线”_”组成,除此之外的任何其他符号是不能作为标识符使用的.(2)标识符中的第一个字符不能为数字.  (3 ...

  4. [Learn Android Studio 汉化教程]第四章 : Refactoring Code

    [Learn Android Studio 汉化教程]第四章 : Refactoring Code 第四章 Refactoring Code    重构代码 在Android Studio中开发,解决 ...

  5. [ABP教程]第四章 集成测试

    Web应用程序开发教程 - 第三章: 集成测试 //[doc-params] { "UI": ["MVC","NG"], "DB& ...

  6. Cobalt Strike系列教程第四章:文件/进程管理与键盘记录

    Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  7. 2018-06-20 中文代码示例视频演示Python入门教程第四章 控制流

    知乎原链 续前作: 中文代码示例视频演示Python入门教程第三章 简介Python 对应在线文档: 4. More Control Flow Tools 录制中出了不少岔子. 另外, 输入法确实是一 ...

  8. python 教程 第四章、 控制流

    第四章. 控制流 控制语句后面要加冒号: 1)    if语句 if guess == number: print 'Congratulations, you guessed it.' # New b ...

  9. 【Java】《Java程序设计基础教程》第四章学习

    4.1 类的封装 封装指的是将东西包装在一起,然后以新的完整形式呈现.包含两个意义: 1). 把对象的全部属性和方法结合在一起,形成一个不可分割的独立单位(即对象). 2). 信息隐藏,即尽可能隐藏对 ...

随机推荐

  1. 求最大公约数和最大公倍数(Java算法)

    最大公约数(最大公因数):指某几个整数共有约数中最大的一个. 求两个整数最大公约数主要的方法: 列举法:各自列出约数,再找出最大的公约数. 素因数分解法:两数各作素因数分解,然后取出共有的项乘起来. ...

  2. Newtonsoft.Json 动态解析 json字符串

    有一个json字符串是动态的,如下面,columns中的数量是不固定的,因此就不能使用反序列化类的方法了: 因此使用这样一种方式,把columns中的所有东西都输出出来: public void Ge ...

  3. leetcode Ch2-Dynamic Programming I

    一. 1. Edit Distance class Solution { public: int minDistance(string t1,string t2) { int len1=t1.size ...

  4. 关于Unity3d的Quaternion.Slerp的学习

    首先在场景中创建三个cube的GameObject,from表示要转换之前的样子,to表示转换之后的样子,change表示转的效果.如下图所示: 其中from和change cube开始运行之前的tr ...

  5. 中文乱码(Python、WEB、ajax)

    http://my.oschina.net/leejun2005/blog/74430 #查看errorb是unicode,还是stringprint isinstance(errorb,unicod ...

  6. mysql 基础学习1

    安装得方法有很多,这里就不详细介绍了. 进入 mysql 控制台 mysql -uroot -p 查看 有哪些库 show databases; 1.创建一个库 create database tes ...

  7. c++计算器后续(4)

    自娱自乐: 大概是终于做到没做完的部分了,第三步助教学长的评论还没去改,感觉那个把读取文件放到Scan里面比较麻烦,其他大概还好.以上. 文件读写: 先是原来的残留问题,都是和fstream :: o ...

  8. Python安装Windows的pip包

    1.到https://www.python.org/downloads/ 下载python包安装python 2.到https://pypi.python.org/pypi/pip#downloads ...

  9. 联想Thinkpad 遇到双系统 uefi Ubuntu无法进入的引导问题解决方案

    最近因为许多课程设计的需要,安装了Ubuntu双系统,但是一开始遇到了安装好了以后无法进入的问题,后来弄好后手残又把引导项给删了又要弄回去,反反复复很多次,网上的很多经验都十分过时,要么对最新的uef ...

  10. [19/04/14-星期日] 网络编程_java.net包(InetAddress类、InetSocketAddress类、URL类)

    一.概念 Java为了可移植性,不允许直接调用操作系统,而是由java.net包来提供网络功能.Java虚拟机负责提供与操作系统的实际连接. InetAddress    作用:封装计算机的IP地址和 ...