搜索
首页后端开发php教程学习PHP的数组总结【经验】_php技巧

PHP有很多关于数组的函数,方便数组操作。

定义:

数组每个实体包含两个项:key和value,可以通过查询键来获取其相应的值。这些键可以是数值(numerical)键或关联(associative)键。数值键与值没有真正的联系,它们只是值在数组中的位置。

PHP提供了很多遍历数组的方法,无法使用关联键还是数值键,都依赖于一种称为数组指针的特性。

创建数组

PHP不需要在创建数组时指定其大小,因为PHP是一种松散的语言,所以不需要在使用数组前先行声明。尽管没有限制,PHP仍提供了正式和非正式的数组声明方法。

引用PHP数组的各个元素,用一对中括号来指示。数组没有大小限制,所以只需建立引用就可以创建数组,例如:

$state[0]= ‘111';

$state[1]= ‘222';

如果索引值是数值索引而且是递增的,还可以在创建时省略索引值。

$state[] =‘111';

$state[] =‘222';

可以使用array()创建数组,如:

$state =array(‘111', ‘222');

$state =array(‘one'=>'111', ‘two'=>'222');

使用list()提取数组,例如:

$state= array(‘one', ‘two', ‘three');

list($one,$two, $three) = $state;

数组内的三个值分别赋给了$one, $two,$three, 可直接输出。

用预定义的值范围填充数组,例如:

$num= range(1, 6);

//类似于$num =array(1, 2, 3, 4, 5, 6);

可选择奇偶:$num =range(1, 6, 2);

//$num= array(1, 3, 5);

可选择字母:$ch =range(“A”, “F”);

//$ch= array(“A”, “B”, “C”, “D”, “E”, “F”);

输出数组

输出数组内容最常用的方法就是迭代处理各个数组键,并输出相应的值。

foreach()函数可以很方便的遍历一个数组,得到每个value和key。

print_r()函数很方便将数组的内容输出到屏幕上。prinf_r()函数接受一个变量,并将其内容发送给标准输出,成功时返回TRUE,否则返回FALSE。

测试数组

通过is_array()函数知道某个特定变量是否一个数组。

is_array()函数确定某变量是否为数组,如果是则返回TRUE,否则返回FALSE。即使数组只包含一个值,也将被认为是一个数组。

添加和删除数组元素

PHP为扩大和缩小数组提供了一些函数,对模仿各种队列实现提供便利。

在数组头添加元素:

array_unshift()函数在数组头添加元素。所有已有的数值键都会相应地修改,以反映其在数组中的新位置,但是关联键不受影响。

$state= array(‘11', ‘22', ‘33');

array_unshift($state,‘00');

//$state= array(‘00', ‘11', ‘22', ‘33');

在数组尾添加元素:

array_push()函数将值添加到数组的末尾,添加新的值之后返回数组中的元素总数。同时通过将这个变量作为输入参数传递给此函数,向数组压入多个变量(元素),其形式为:

$state= array(‘1', ‘2');

array_push($state,‘3');

//$state= array(‘1', ‘2', ‘3');

从数组头删除元素:

array_shift()函数删除并返回数组中找到的第一个元素。其结果是,如果使用的是数值键,则所有相应的值都会下移,而使用关联键的数组不受影响,其形式为:

$state= array(‘1', ‘2');

array_shift($state);

//$state= array(‘2');

从数组尾删除元素:

array_pop()函数删除并返回数组的最后一个元素,其形式为:

$state= array(‘1', ‘2');

array_pop($state);

//$state= array(‘1');

定位数组元素

搜索数组:

in_array()函数在数组中搜索一个特定值,如果找到这个值则返回TRUE,否则返回FALSE,其形式如下:

$user= array(‘111', ‘222', ‘333');

$str= ‘111';

if(in_array($str,$user)){

echo‘yes';

}else{

echo ‘no';

}

第三个参数strict可选,它强制in_array()在搜索时考虑类型。

搜索关联数组:

如果在一个数组中找到一个指定的键,函数array_key_exists()返回TRUE,否则返回FALSE。其形式如下:

$arr= array('one'=>'1', 'two'=>'2', 'three'=>'3');

if(array_key_exists('two',$arr)){

echo'yes';

}else{

echo‘no';

}

搜索关联数组:

array_search()函数在一个数组中搜索一个指定的值,如果找到则返回相应的值,否则返回FALSE,其形式如下:

$arr= array('one'=>'1', 'two'=>'2', 'three'=>'3');

if(array_search('1',$arr)){

echo'yes';

}else{

echo‘no';

}

获取数组键:

array_key()函数返回一个数组,其中包含所搜索数组中找到的所有键,其形式如下:

$arr= array('one'=>'1', 'two'=>'2', 'three'=>'3');

$keys= array_keys($arr);

var_dump($keys);

//array(3) {[0]=> string(3) "one" [1]=> string(3) "two" [2]=>string(5) "three" }

获取数组值:

array_values()函数返回一个数组中的所有值,并自动为返回的数组提供数组索引,其形式如下:

$arr= array('one'=>'1', 'two'=>'2', 'three'=>'3');

$values= array_values($arr);

var_dump($values);

//array(3) {[0]=> string(1) "1" [1]=> string(1) "2" [2]=>string(1) "3" }

遍历数组

通常需要遍历数组并获得各个键或值(或者同时获得键和值),PHP提供了一些函数来满足需求。许多函数能完成两项任务,不仅能获取当前指针位置的键或值,还能将指针移向下一个适当的位置。

获取当前数组键:

key()函数返回数组中当前指针所在位置的键,其形式如下:

$arr= array('one'=>'1', 'two'=>'2', 'three'=>'3');

$key= key($arr);

var_dump($key);

//string(3) "one"

注意:每次调用key()时不会移动指针。

获取当前数组值:

current()函数返回数组中当前指针所在位置的数组值。其形式如下:

$arr= array('one'=>'1', 'two'=>'2', 'three'=>'3');

$value= current($arr);

var_dump($value);

//string(1)“1”

获取当前数组键和值:

each()函数返回数组的当前键/值对,并将指针推进一个位置,其形式如下:

$arr =array('one'=>'1', 'two'=>'2', 'three'=>'3');

var_dump(each($arr));

//array(4) {[1]=> string(1) "1" ["value"]=> string(1)"1" [0]=> string(3) "one" ["key"]=>string(3) "one" }

返回的数组包含4个键,键0和key键包含键名,而键1和value包含相应的数据。如果执行each()前指针位于数组末尾,则返回FALSE。

移动数组指针:

1) 将指针移动到下一个数组位置

next()函数返回紧接着放在当前数组指针下一个位置的数组值,如果指针本来就位于数组的最后一个位置,则返回FALSE

$arr= array('one'=>'1', 'two'=>'2', 'three'=>'3');

echo next($arr); //输出2

echo next($arr); //输出3

2) 将指针移动到前一个数组位置

prev()函数返回位于当前指针前一个位置的数组值,如果指针本来就位于数组的第一个位置,则返回FALSE

3) 将指针移动到第一个数组位置

reset()函数用于将数组指针设置回数组的开始位置,如果需要在脚本中多次查看或处理一个数组,经常使用这个函数,另外这个函数还经常在排序结束时使用。

4) 将指针移动到最后一个数组位置

end()函数将指针移动到数组的最后一个位置,并返回最后一个元素。

向函数传递数组值:

array_walk()函数将数组中的各个元素传递到用户自定义函数。如果需要对各个数组元素完成某个特定动作,这个函数将起作用。其形式如下:

functiontest($value ,$key){

echo$value.' '.$key."
";

}

$arr= array('one'=>'1', 'two'=>'2', 'three'=>'3');

array_walk($arr,'test');

//1 one

//2 two

//3 three

如果使用多维数组,PHP5中引入的array_walk_recursive()函数可以递归地对数组中的每一个元素应用一个用户定义函数。

确定数组大小和元素唯一性

确定数组的大小:

count()函数返回数组中值的总数

如果启动了可选的mode参数(设置为1),数组将进行递归计数统计元素。count(array(), 1);

注意:sizeof()函数是count()的别名。功能一致。

统计数组元素出现的频率:

array_count_values()函数返回一个包含关联键/值对的数组,其形式如下:

$arr= array('A', 'B', 'C', 'A');

$res= array_count_values($arr);

print_r($res);

//Array( [A] => 2 [B] => 1 [C] => 1 )

值表示出现的频率。

确定唯一的数组元素:

array_unique()函数会删除数组中所有重复的值,返回一个由唯一值组成的数组,其形式如下:

$arr= array('A', 'B', 'C', 'A');

$res= array_unique($arr);

print_r($res);

//Array( [0] => A [1] => B [2] => C )

可选参数sort_flags(PHP5.2.9中新增)可以确定如何对数组键排序。默认地,值会被作为字符串排序,不过也可以按数值对值排序(SORT_NUMERIC),或使用PHP默认的排序方法(SORT_REGULAR),还可以根据本地化环境排序(SORT_LOCALE_STRING)。

数组排序

逆置数组元素排序:

array_reverse()函数将数组中元素的顺序逆置,其形式如下:

$arr= array('A', 'B', 'C');

$res= array_reverse($arr);

print_r($res);

//Array( [0] => C [1] => B [2] => A )

如果可选参数preserve_keys设置为TRUE,则保持键映射,否则重新摆放后的各个值将对应于先前该位置上的相应键。

$arr= array('A', 'B', 'C');

$res= array_reverse($arr, true);

print_r($res);

//Array( [2] => C [1] => B [0] => A )

置换数组键和值:

array_flip()函数将置换数组中键及其相应值的角色,其形式如下:

$arr= array('A', 'B', 'C');

$res= array_flip($arr);

print_r($res);

//Array( [A] => 0 [B] => 1 [C] => 2 )

数组排序:

sort()函数对数组进行排序,各元素按值由低到高的顺序排列,其形式如下:

sort()函数不返回排序后的数组,相反它只是“就地”对数组排序,不论结果如何都不返回任何值。sort_flags参数可选,将根据这个参数指定的值修改该函数的默认行为。

1) SORT_NUMERIC,按数值排序。对整数和浮点数排序很有用。

2) SORT_REGULAR,按照相应的ASCII值对元素排序。

3) SORT_STRING,按接近于人所认知的正确顺序对元素排序。

要保持初始键/值对应条件下的数组排序需要用到asort()函数。

assort()函数与sort()函数相同,以升序对数组排序,只不过它将保持键/值的关联,其形式如下:

$arr= array('C', 'B', 'A');

$res= $arr;

print_r($arr);

sort($arr);

print_r($arr);

asort($res);

print_r($res);

//Array ( [0]=> C [1] => B [2] => A ) Array ( [0] => A [1] => B [2] => C )Array ( [2] => A [1] => B [0] => C )

以逆序对数组排序

rsort()函数与sort()函数相同,只不过它以相反的顺序(降序)对数组元素排序。

如果使用可选的sort_flags参数,具体的排序行为将由这个值确定。

保持键/值对的条件下以逆序对数组排序

与asort()一样,arsort()函数会保持键/值的关联,但是它以逆序对数组up

$arr= array('C', 'B', 'A', 'D');

arsort($arr);

print_r($arr);

//Array( [3] => D [0] => C [1] => B [2] => A )

如果使用可选的sort_flags参数,具体的排序行为将由这个值确定。

数组自然排序

natsort()函数提供了一种相当于人们平常使用的排序机制。

典型算法排序如下:

p1.jpg,p10.jpg, p2.jpg, p20.jpg

使用natsort()函数如下:

p1.jpg,p2.jpg, p10.jpg, p20.jpg

不区分大小写的自然排序

如:

Picture1.jpg,PICTURE10.jpg, picture2.jpg, picture20.jpg

按键值对数组排序

ksort()函数按键对数组排序,如果成功则返回TRUE,失败将返回FALSE

以逆序对数组键排序

krsort()函数的操作与ksort()相同,也按键排序,将以逆序排序。

根据用户自定义规则排序

usort()函数提供了另一种排序方法,可以使用在该函数中指定的用户自定义比较算法对数组排序。如果需要以某种方法对数据排序,而PHP的任何内置排序函数没有提供相应支持,就需要该函数。

数组合并、拆分、接合和分解

合并数组

array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次追加。其形式如下:

$arr= array('C', 'B', 'A', 'D');

$arr1= array('1', '2', '3', '4');

$arr2= array_merge($arr, $arr1);

print_r($arr2);

//Array( [0] => C [1] => B [2] => A [3] => D [4] => 1 [5] => 2 [6]=> 3 [7] => 4 )

递归追加数组

array_merge_recursive()函数与array_merge()相同,可以将两个或多个数组合并到一起,形成一个联合的数组。两者之间的区别在于,当某个输入数组中的某个键已经存在于结果数组中时该函数会采取不同的处理方法。array_merge()会覆盖前面存在的键/值对,将其替换为当前输入数组中的键/值对,而array_merge_recursive()将两个值合并在一起,形成一个新的数组并以原有的键作为数组名。其形式为:

$arr= array('one'=>'C', 'one'=>'B');

$arr1= array('three'=>'1', 'one'=>'2');

$arr2= array_merge_recursive($arr, $arr1);

print_r($arr2);

//Array( [one] => Array ( [0] => B [1] => 2 ) [three] => 1 )

合并两个数组

array_combine()函数会生成一个新数组,这个数组由一组提交的键和对应的值组成,其形式为:

$arr= array('A', 'B');

$arr1= array('1', '2');

$arr2= array_combine($arr, $arr1);

print_r($arr2);

//Array( [A] => 1 [B] => 2 )

拆分数组

array_slice()函数将返回数组中的一部分,从键offset开始,到offset+length位置结束。

offset为正值时,拆分将从距数组开头的offset位置开始;如果offset为负值,则拆分从距数组末尾的offset位置开始。如果省略了可选参数length,则拆分将从offset开始,一直到数组的最后一个元素。如果给出了length且为正数,则会在距数组开头的offset+length位置结束。相反,如果给出了length且为负数,则在距数组开头的count(array) - |length|位置结束。其形式如下:

$arr= array('A', 'B', 'C', 'D');

$arr1= array_slice($arr, 2, 1);

print_r($arr1);

//Array( [0] => C )

求数组的交集

array_intersect()函数返回一个保留了键的数组,这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的值组成。其形式如下:

$arr= array('A', 'B', 'C', 'D');

$arr1= array('A', 'B', 'E');

$arr2= array('A', 'F', 'D');

$arr3= array_intersect($arr, $arr1, $arr2);

print_r($arr3);

//Array( [0] => A )

注意:只有在两个元素有相同的数据类型时,array_intersect()才会认为它们相等。

求关联数组的交集

array_intersect_assoc()与array_intersect()基本相同,只不过它在比较中还考虑了数组的键。因此,只有在第一个数组中出现,且在所有其他输入数组中也出现的键/值对才被返回到结果数组中。其形式如下:

$arr= array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D');

$arr1= array('a'=>'A', 'c'=>'B', 'E');

$arr2= array('a'=>'A', 'b'=>'F', 'd'=>'B');

$arr3= array_intersect_assoc($arr, $arr1, $arr2);

print_r($arr3);

//Array( [a] => A )

求关联数组的差集

函数array_diff_assoc()与array_diff()基本相同,只是它在比较时还考虑了数组的键,因此,只在第一个数组中出现而不在其他输入数组中出现的键/值对才会被返回到结果数组中。其形式如下:

$arr= array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D');

$arr1= array('a'=>'A', 'b'=>'B', 'e'=>'E');

$arr3= array_diff_assoc($arr, $arr1);

print_r($arr3);

//Array( [c] => C [d] => D )

其他有用的数组函数

返回一组随机的键

array_rand()函数将返回数组中的一个或多个键。其形式为:

$arr= array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd'=>'D');

$arr1= array_rand($arr, 2);

print_r($arr1);

//Array( [0] => b [1] => d )

随机洗牌数组元素

shuffle()函数随机地对数组元素重新排序。

对数组中的值求和

array_sum()函数将数组内的所有值加在一起,返回最终的和,其形式如下:

$arr= array('A', 32, 12, 'B');

$count= array_sum($arr);

print_r($count);

//44

如果数组中包含其他数据类型(例如字符串),这些值将被忽略。

划分数组

array_chunk()函数将数组分解为一个多维数组,这个多维数组由多个包含size个元素的数组所组成。其形式如下:

$arr= array('A', 'B', 'C', 'D');

$arr1= array_chunk($arr, 2);

print_r($arr1);

//Array( [0] => Array ( [0] => A [1] => B ) [1] => Array ( [0] => C [1]=> D ) )
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能