文章17 | 阅读 8338 | 点赞0
在前面我们所学的不管是变量和常量,都是一个个单个的数据,而有时候我们有这样的需求,需要把一些相同类型的数值或一些不相干的数值,合理的存储起来,而用到的时候可以按照某种规则取出数据。这时候前面的变量等就不能满足要求,在这里就是用到数组。
PHP中的数组和别的语言的数组不一样,这也是PHP语言语法的松散性造成的。那有什么不一样?
所谓数组,就是相同数据类型或不同的数据类型元素按一定顺序排列的集合,就是把有限个变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。
数组的定义通俗的理解就是存放数据的集合,
<?php
//定义一个数组,里面存放的数据类型可以任意类型
$arr = array(12,true,false,'abcd',12.2);
print_r($arr);//输出数组。
.....结果......
Array ( [0] => 12 [1] => 1 [2] => [3] => abcd [4] => 12.2 )
可以看到在数组中存放各种数据类型,在输出的时候都可以进行输出。并且可以看到在输出的时候,每个数值都有一个下标于之对应,这个下标就称之为键(key),而数值是值(value),我们在想取某个值得时候可以通过键来取。
$a = 数组名[键名]
echo $arr[0];
.....结果......
12
当数组的键值是数字的时候,它的下标是从0开始计算的。
那么数组的怎么创建的呢?
第一种
<?php
//定义数组,数值用逗号隔开。
$arr = array(1,2,3,4,'abcd',true);
print_r($arr);
.....结果......
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => abcd [5] => 1 )
用 array() 语言结构来新建一个数组,从输出结果中可以看到下标是数字。而取数据也是通过数字下标来取的。这就是索引数组。
第二种
<?php
//关联数组,自己定义下标,用=>来定义键和值
$arr = array('a' => 1,'b' => 2,'c' => 'abcde', 'd' => true);
print_r($arr);
.....结果......
Array ( [a] => 1 [b] => 2 [c] => abcde [d] => 1 )
这种方法也是用array()语法结构来定义的,但是数组的下标是我们自己定义的,这里可以根据自己的情况自己定义下标。关于键值得定义需要注意,key 会有如下的强制转换
如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。
取关联数组中的值需要使用自己定义的键来取。
第三种
<?php
$arr[0] = 1;
$arr[2] = 2;
$arr['a'] = 12;
$arr[4] = 45;
print_r($arr);
.....结果......
Array ( [0] => 1 [2] => 2 [a] => 12 [4] => 45 )
第三种数组的定义可以直接用方括号进行定义,系统会默认的认为这是一个数组,并进行创建。至于下标你可以使用数字或者字符串。但是如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。
PHP的数组的长度是一个不固定的,当你填完数据时候,你还是可以进行填写数据的,同时数组的长度也会跟着增加,这就是php数组的动态增长。
<?php
for($i = 0; $i < 10; $i++){
$arr[] = $i;
}
print_r($arr);
......结果.......
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )
上面的代码利用一个for循环,使用数组的第三种定义方式进行赋值,但是可以看到我们并没有在数组的方括号里面写下标,但是程序并没有报错,这是因为数组的动态增长。如果未指定key的值,PHP 将自动使用之前用过的最大 integer 键名加上 1 作为新的键名。因此,在输出结果中可以看到下标是从0开始自动增长的。
前面我们介绍了数组的创建和基本的使用,那么怎么从数组中全部的取出里面的值?在PHP中,可以使用循环控制流程取到数组中的值,通过循环遍历数组来逐个得到里面的值。
for
在数组的遍历中可以使用for来的到数组里面的值。
<?php
$arr = array(1,9,4,2,8,10,5);
$sum = count($arr);
for($i = 0; $i < $sum; $i++){
echo $arr[$i] . ' ';
}
.....结果......
1 9 4 2 8 10 5
上面的count()这个系统函数是统计一个数组里的所有元素,或者一个对象里的东西。从而的到数组的大小,也就是长度。然后通过for循环,把$i当做数组的下标($i从0开始)。
foreach
在上面的代码中如果我们的数组是关联数组,也就是数组的下标是一个字符串,那么上面的代码是不可能取出来。所以我们可以使用PHP提供的另外一种循环方法:foreach()。它的语法有两种:
foreach(数组名 as $key => $value){
}
foreach(数组名 as $value){
}
其中“as”是一个关键字,不能变。
foreach里面有可以有三个参数,第一个参数是数组的名字,第二个参数key是用来存储从数组中∗∗取出∗∗来的键,第三个参数value是用来存储从数组中取出来的值。当然键和值得名字可以根据自己的情况自己取。
当里面的参数是两个的时候,$value只用来存放从数组中取出来的值,而没有键。
<?php
$arr = array(1,9,4,2,8,10,5);
foreach ($arr as $key => $value) {
echo $key . '=>' . $value . ' ';
}
echo '<br>';
foreach ($arr as $value) {
echo $value . ' ';
}
.....结果......
0=>1 1=>9 2=>4 3=>2 4=>8 5=>10 6=>5
1 9 4 2 8 10 5
在第二个循环中没有键的输出。
上面的两种循环结构,就是我们常用到的数组遍历的方法,其中第二个方法,也就是用foreach的方法,我们会经常用到,因为这种方法对于所有的数组都适用,而不用考虑下标的问题。
<?php
$arr = array(1,9,4,2,8,10,5);
$array = array_reverse($arr);
print_r($array);
.....结果......
Array ( [0] => 5 [1] => 10 [2] => 8 [3] => 2 [4] => 4 [5] => 9 [6] => 1 )
<?php
$arr = array(1,9,4,2,8,10,5);
sort($arr);
print_r($arr);
.....结果.....
Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 8 [5] => 9 [6] => 10 )
<?php
$arr = array(1,9,4,2,8,10,5);
function mysort($a,$b){ //写自己的函数,使数组按照从大到小的顺序进行排序。
if($a == $b){
return 0;
}
return $a < $b ? 1 : -1;
}
usort($arr, 'mysort');
print_r($arr);
......结果......
Array ( [0] => 10 [1] => 9 [2] => 8 [3] => 5 [4] => 4 [5] => 2 [6] => 1 )
这里使用到可变函数。
我们在运算符那一节并没有讲到数组的运算符,其实数组也是有运算符的。
数组讲到这里,算是基本讲完了,数组在我们的开发中是经常用到的,不止上面的以为数组,有时候数组里面还可能是一个数组,只要数组的结构在脑海中有清晰的认识,不管有几个数组,都是可以解决的,同时数组的出现也引出了一些关于数组的算法。可以看
数组的顺序查找和二分查找
数组的插入排序和快速排序
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/li741350149/article/details/52680194
内容来源于网络,如有侵权,请联系作者删除!