【笔记】php数组操作

数组类型

  1. 关联数组:关联数组的键由字符串和数字混合组成。
    $array = array('a' =? 'foo', 'b'=>'bar')
    
  2. 索引数组:索引数组的键由数字组成。
    $array = array(1=>'foo', 2=>'bar')
    

在数组中,如果未指定键,PHP就将自动使用之前用过的最大的数字键加上1作为新的键。

<?php
$array1 = array("foo","bar","hallo","world");
var_dump($array1);
echo "<br/>";
$array2 = array(
	"a",
	"b",
	6=>"c",
	"d",
);
var_dump($array2);
?>

在这里插入图片描述在第一个数组中没有指定键名,所以默认数组为索引数组,第二个数组中最后一个值“d”被自动赋予键名7,这是因为之前的最大整数键名是6。

创建数组

一维数组

可以使用array()创建数组,除此之外还可以使用方括号“[]”创建数组.

<?php
$arr['a'] = 'red';
$arr['b'] = 'orange';
$arr['c'] = 'blue';
$arr['d'] = 'green';

var_dump($arr);
echo "<br/>";

$array = ['dog', 'cat', 'wolf', 'dragon'];
var_dump($array);
echo "<br/>";

$bar[] = 'a';
$bar[] = 'b';
$bar[] = 'c';
var_dump($bar);
?>

在这里插入图片描述
还可以使用range()来建立一个包含指定范围单元的数组.

array range(mixed $start, mixed $limit [, number $step = 1])

start是序列的第一个值,序列结束于limit的值。如果给出了step的值,它将被作为单元之间的步进值。step应该为正值,如果未指定,step默认为1。该函数将会创建一个元素值在start和limit之间的数组。

<?php
$a = range(0, 5);
$b = range(0, 5, 2);
$c = range('a', 'g');
$d = range('a', 'g', 2);
echo "<pre>";
print_r($a);
print_r($b);
print_r($c);
print_r($d);
?>

在这里插入图片描述

二维数组

<?php
$person = array(
	'lily' => array(
		'age' => '20 years',
		'weight' => '50kg',
		'hobby' => 'sleep'
	), 'Tom' => array(
		'age' => '12 years',
		'weight' => '40kg',
		'hobby' => 'eat'
	), 'Andy' => array(
		'age' => '30 years',
		'weight' => '70kg',
		'hobby' => 'write'
	)
);
echo "<pre>";
print_r($person);
?>

在这里插入图片描述

数组操作

检查数组中是否存在某个值:in_array()

bool in_array(mixed $needle, array $haystack [, bool $strict = FALSE])

在haystack中搜索needle,如果没有设置strict,就使用宽松的比较。如果strict的值为true,则in_array()函数还会检查needle的类型是否和haystack中的相同。此函数的返回值为true或false。
注意,in_array()函数只能在当前维度数组中检查是否存在某个元素。
在这里插入图片描述

数组转换为字符串:implode()

string implode (string $glue, array $pieces)

在这里插入图片描述

计算数组中的单元数目: count()

使用count()函数可计算数组中的单元数目,count()函数还可以计算对象中的属性个数。

int count  (mixed $var [, int $mode = COUNT_NORMAL])

如果可选的mode参数设为COUNT_RECURSIVE(或1), count()将递归地对数组计数,对计算多维数组的所有单元尤其有用。mode的默认值是0。注意,count()识别不了无限递归。
在这里插入图片描述

数组当前单元和数组指针:current()

mixed current(array &$array)

说明:每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入数组中的第一个单元。
在这里插入图片描述
可以移动数组内部指针的函数:

  • end():将数组的内部指针指向最后一个单元并返回其值。
  • prev():将数组的内部指针倒回一位,返回内部指针指向前一个单元的值,当没有更多单元时返回False。
  • reset():将数组的内部指针指向第一个单元并返回第一个数组单元的值。
  • next():将数组中的内部指针向前移动一位,返回数组内部指针指向的下一个单元的值,当没有更多单元时返回False。

获取数组键名和值

从关联数组中取得键名:key()

说明:key()函数返回数组中内部指针指向的当前单元的键名,但它不会移动指针。如果内部指针超过了元素列表尾部,或者数组是空的,key()就会返回NULL。
在这里插入图片描述

检查给定键名或索引是否存在于数组中:array_key_exists()

说明:array_key_exists()在给定的key存在于数组中时返回true。key可以是任何能作为数组索引的值。array_key_exists()也可用于对象。
在这里插入图片描述

获取数组中部分或所有的键名:array_keys()

说明:array_keys()返回数组的键名。如果指定了可选参数search_value,就只返回值为search_value的键名,否则数组中的所有键名都会被返回。strict设置为true时,判断在搜索的时候使用严格的比较(= = =)。
在这里插入图片描述
在这里插入图片描述

获取数组中所有的值:array_values()

在这里插入图片描述

搜索给定值返回键名:array_search()

说明:如果在haystack中搜索到了needle,就返回它的键,否则返回false。如果needle在haystack中不止一次出现,就返回第一个匹配的键。要返回所有匹配值的键,应该用array_keys()加上可选参数search_value来代替。如果可选参数strict为true,那么array_search()将在haystack中检查完全相同的元素。这意味着同样检查haystack里needle的类型,并且对象需是同一个实例。
在这里插入图片描述

填补数组

将数组填补到指定长度:array_pad()

说明:array_pad()返回数组的一个备份,并用pad_value将其填补到pad_size指定的长度。如果pad_size为正,就填补到数组的右侧,若为负,则从左侧开始填补。如果pad_size的绝对值小于或等于input数组的长度,就没有任何填补。一次最多可以填补1048 576个单元。
在这里插入图片描述
在这里插入图片描述

用给定的值填充数组:array_fill()

说明:array_fill()用value参数的值将一个数组填充num个条目,start_index是整型数据。若start_index为非负整数,数组的键由start_index, start_index+1,start_index+2, start_index+3…,直到start_index+num-1组成。若start_index为负整数,则数组的键由start_index,0,1,2, …, num-1组成。该函数返回填充后的数组。
在这里插入图片描述

使用指定的键和值填充数组:array_fill_keys()

说明:使用value参数的值作为值,使用keys数组的值作为键来填充一个数组,返回填充后的数组。

在这里插入图片描述

从数组中随机取出一个或多个单元:array_rand()

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

说明:input是输入的数组,num_req指明需要输出多少个单元。如果指定的数目超过了数组里的数量,将会产生一个E_WARNING级别的错误。如果只取出一个,那么array_rand()将返回一个随机单元的键名,否则返回一个包含随机键名的数组。这样就可以随机从数组中取出键名和值。

在这里插入图片描述

数组排序

排序:sort()

说明:本函数对数组进行排序。当本函数结束时,数组单元从最低到最高重新安排,成功时返回true,失败时返回false。array是要排序的数组,sort_flags是可选的参数,具体值如下。

  • SORT_REGULAR:正常比较单元(不改变类型)。
  • SORT_NUMERIC:单元被作为数字来比较。
  • SORT_STRING:单元被作为字符串来比较。
  • SORT_LOCALE_STRING:根据当前的区域(locale)设置把单元当作字符串比较,可以用setlocale()来改变。
  • SORT_NATURAL:和natsort()类似,对每个单元以“自然的顺序”对字符串进行排序,是PHP 5.4.0中新增的一个参数。
  • SORT_FLAG_CASE:能够与SORT_STRING或SORT_NATURAL合并(OR位运算),不区分大小写排序字符串。
    在这里插入图片描述

对数组进行排序并保持索引关系:asort()

bool asort(array &$array [, int $sort_flags = SORT_REGULAR])

说明:本函数对数组进行排序,数组的索引保持和单元的关联,主要用于对那些单元顺序很重要的结合数组进行排序。其中,array是输入的数组,sort_flags可选参数和sort()函数一致。同样,排序成功时返回true,失败时返回false。
在这里插入图片描述

对数组进行逆向排序并保持索引关系:arsort()

在这里插入图片描述

对数组进行逆向排序:rsort()

在这里插入图片描述

将数组打乱:shuffle()

在这里插入图片描述

遍历数组

for

在这里插入图片描述

foreach

在这里插入图片描述在使用foreach循环遍历数组的时候,foreach是对数组的备份进行操作,在循环内部修改数组不会对循环之外访问数组有影响。示例如下:
在这里插入图片描述如果是按照引用循环,那么在循环内部对数组做的修改会影响数组本身。示例如下
在这里插入图片描述

each() list()

each()函数返回数组中当前的键值并将数组指针向前移动。在执行each()之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用each遍历数组,就必须使用reset()。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

数组的拆分与合并

将一个数组分割成多个:array_chunk()

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

说明:此函数将input数组分割成多个数组,返回一个多维数组,其中每个数组的单元数目由size决定。最后一个数组的单元数目可能会少于size个。可选参数preserve_keys设为true,可以使PHP保留输入数组中原来的键名。如果指定了false,则每个结果数组将用从零开始的新数字索引。默认值是false。

在这里插入图片描述

合并一个或多个数组:array_merge()

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

说明:array_merge()将一个或多个数组单元合并起来,一个数组中的值附加在前一个数组的后面,返回作为结果的数组。如果输入的数组中有相同的字符串键名,那么该键名后面的值将覆盖前一个值。如果数组包含数字键名,那么后面的值将不会覆盖原来的值,而是附加到后面。如果只给了一个数组并且该数组是数字索引的,那么键名会以连续方式重新索引。

在这里插入图片描述如果想完全保留原有数组并只想将新的数组附加到后面,就用“+”运算符。使用“+”连接数组,连接的数组中键名相同时,第一个数组的键值对将会保留,后面的将会被舍弃。示例如下:

在这里插入图片描述

数组增删

在数组开头插入一个或多个单元:array_unshift()

说明:array_unshift()将传入的单元插入array数组的开头。注意,单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。
在这里插入图片描述

将数组开头的单元移出数组:array_shift()

array_shift()将array的第一个单元移出并作为结果返回,将array的长度减一并将所有其他单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名保持不变。

在这里插入图片描述

将一个或多个单元压入数组的末尾:array_push()

说明:array_push()将array当成一个栈,并将传入的变量压入array的末尾。array的长度将根据入栈变量的数目增加。该函数返回处理之后数组的元素个数。使用示例如下:
在这里插入图片描述

将数组的最后一个单元弹出:array_pop()

说明:array_pop()弹出并返回array数组的最后一个单元,并将数组array的长度减一。如果array为空(或者不是数组)就将返回NULL。此外,如果被调用的不是一个数就会产生一个Warning。示例如下:

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhShy23

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值