PHP数组类

在这里插入图片描述

创建PHP数组

PHP中的数组基本可以分为三大类,分别是数值数组、关联数组、多维数组。

1.创建数值数组

数值数组存储的每个元素都带有一个数字标识键。可以使用不同的方法来创建数值数组。
创建时自动分配数字标识符。
$name = array("leo","bob","alice");

这段代码是使用array函数来创建一个含有三个元素的数值数组。

注意:这里的数值索引数组以位置0起始。

也可以人工分配数字标识键的方式创建相同的一个数组。

$name[0] = "leo";
$name[1] = "bob";
$nmae[2] = "alice";

打印数值数组的结构并使用数字标识键读取相应的值。

<pre>
<?php
//以人工分配数字标识键的方式创建数组
$name[0] = "leo";
$name[1] = "bob";
$name[2] = "alice";
print_r($name);
echo $name[0] . " and " . $name[1] . " are boys " . " but " . " alice is a girl ";
?>
</pre>

在这里插入图片描述

创建关联数组

关联数组,它的每个标识符都关联一个值。在存储有关具体命名的值的数据时,
使用数值数组可能不是最好的做法。通过关联数组,程序中可以把值作为键,并向它们赋值。

使用一个数组把年龄分配给不同的人。

$ages = array("leo"=>19,"bob"=20,"alice"=19);

使用自定义标识的方式创建一个相同的数字

$age['leo'] = "19";
$age['bob'] = "20";
$age['alice'] = "19";

打印关联数组的结构。

<pre>
<?php
//以人工分配关联标识键的方式创建数组
$age['leo'] = "19";
$age['bob'] = "20";
$age['alice'] = "19";
print_r($age);
echo "leo is " . $age['leo'] . " years old ";
?>
</pre>

在这里插入图片描述

创建多维数组

在多维数组中,主数组中的每个元素也是一个数组。在子数组中的每个元素也可以是数组,
以此类推。创建一个带有自动分配的标识键的多维数组。
$friends = array
(
	"web"=>array("leo","zoy","jane"),	//注意括号外面是逗号
	"reserve"=>array("chris"),
	"crypto"=>array("bob","alice")
);	

读取所创建的多维数组的某个值

<pre>
<?php

$friends = array
(
	"web"=>array("leo","zoy","jane"),	//注意括号外面是逗号
	"reverse"=>array("chris"),
	"crypto"=>array("bob","alice")
);
print_r($friends);
echo "The worst person is " . $friends[web][0];

?>
</pre>

在这里插入图片描述

增加删除数组元素

使用$arrayname[]增加数组元素

$friends = array('leo','bob','alice');

使用以下代码,直接添加一个元素上去

$friends['new'] = 'zoy';

添加后,这个数组如果用print_r函数打印出来的话,结果如下:
在这里插入图片描述

对于这个数值数组,还有一种方式来添加元素:

$freinds[] = 'zoy';

追加后数组的结果如下:
在这里插入图片描述
可以从结果中看出,使用这种方式添加的数据元素,它的数值标识会是,这个数值中已存在的那个最大标识数自动加1。这种自动递增的特点在动态增加数组元素时能给程序设计带来很大的方便,省去了用程序判断最大的数值标识并递增的过程。

使用unset()删除数组中的元素

实际上unset()是用来销毁指定的变量的,但是也使用它来删除数组中的元素,而且在删除数组中指定的某个元素时,使用这个方法是非常方便的。

比如有如下的一个数组,需要删除其中的值为leo元素。

$friends = array(1=>'leo',2=>'bob',3=>'alice',4=>'zoy');

使用如下语句:

unset($friends[1]);

这样就可以把数组中的值为leo的元素删除。
在这里插入图片描述

注意:在PHP3中,unset()将返回TRUE(实际上是整型值1),而在PHP4或更高版本中,
unset()不再是一个真正的函数:它现在是一个语句,这样就没有返回值,试图获取unset()的返回值将导致解析错误

使用array_push()压入数组元素

PHP提供一个入栈函数array_push(),可以将一个或多个单元压入数组的末尾(入栈)。该函数的语法如下
int array_push(array &array, mixed var [, mixed ...])

该函数将array当成一个栈,并将传入的变量压入array的末尾。array的长度将根据入栈变量的数目增加。

<pre>
<?php

$kids = array("leo", "bob");
echo "原数组";
echo "<br />";
print_r($kids);
array_push($kids, "alice","zoy");
echo "入栈的数组";
echo "<br />";
print_r($kids);

?>
</pre>

在这里插入图片描述

使用array_pop弹出数组元素

PHP提供一个入栈函数array_pop(),将数组最后一个单元弹出(出栈)。
mixed array_pop( array &array )

该函数弹出返回array数组的最后一个单元,并将数组array的长度减1.如果array为空(或者不是数组)返回NULL

<pre>
<?php

$kids = array("leo", "bob","alice","zoy","joker");
echo "原数组";
echo "<br />";
print_r($kids);

$friends = array_pop($kids);

echo "出栈的数组";
echo "<br />";
print_r($kids);

?>
</pre>

在这里插入图片描述

遍历输出数组

使用print_r打印数组

根据前面的代码发现,都是使用print_r()函数来输出变量
bool print_r( mixed expression [, bool return ] )

该函数显示关于一个变量的易于理解的信息,其中expression就是需要显示的参数,如果给出的是string、integer或float,将打印变量本身。如果给出的是array,将会按照一定格式显示键和元素。object与数组类似。print_r()将把数组的指针移到最后边,使用reset()可让指针会到开始处。

return 是一个可选参数,可以用来修改函数的行为,将输出返回给调用者,而不是发送到标准输出。

<?php
$kids = array("leo","bob","alice","zoy");
print_r($kids);
?>

在这里插入图片描述
和前面代码运行结果相比,不够直观,为了解决这个问题,可以多加一个HTML语言的"pre"标签。这个标签可以把包含在其中的空格、回车、换行、制表符等按照文本原先的格式显示出来

<pre>
<?php
$kids = array("leo","bob","alice","zoy");
print_r($kids);
?>
</pre>

在这里插入图片描述

使用for循环语句输出数组

对于一个按照顺序索引的数值数组,可以使用for循环语句来依次访问其中的数组元素
<pre>
<?php
$kids = array("leo","bob","alice","zoy");
$count = count($kids);
echo "使用for语句遍历数组";
echo "<br />&nbsp;<br />";
for($i = 0; $i < $count; $i++)
{
	$j = $i + 1;	//自动分配的下表是从0开始的
	echo "第{$j}个元素是:$kids[$i]";	//根据数值标识,打印数组元素
	echo "<br />&nbsp;<br />";
}
?>
</pre>

在这里插入图片描述

使用foreach循环语句输出数组

for循环语句 提供一种遍历数组的方式,这种方式虽然很简便,但是也有它的局限性。
如果一个数组是关联数组,那么用for语句就显得不合适了,
这个时候就可以用PHP专门为数组和对象遍历提供的foreach循环语句。
foreach (array_expression as &value)
	statement
foreach (array_expression as $key => $value)
	statement

第一种格式遍历给定的array_expression数组,每次循环中,当前单元的值被赋给 v a l u e 并 且 数 组 内 部 的 指 针 向 前 移 一 步 ( 因 此 下 一 次 循 环 宗 将 会 得 到 下 一 个 单 元 ) 第 二 种 格 式 做 同 样 的 事 , 除 了 当 前 单 元 的 键 名 也 会 在 每 次 循 环 中 被 赋 给 变 量 value并且数组内部的指针向前移一步(因此下一次循环宗将会得到下一个单元) 第二种格式做同样的事,除了当前单元的键名也会在每次循环中被赋给变量 valuekey

<pre>
<?php
$kids = array('L'=>"leo",'B'=>"bob",'A'=>"alice");
echo "使用foreach语句遍历数组";
echo "<br />";
foreach($kids as $key=>$value)
{
	echo "$key is: $value";
	echo "<br />";
}
?>
</pre>

在这里插入图片描述
在这段代码中,每次foreach循环都会将数组的一个索引赋值给变量 k e y , 把 对 应 得 值 赋 值 给 遍 历 key,把对应得值赋值给遍历 keyvalue。

数组排序

使用sort对数组进行排序

PHP提供排序得sort()函数使用语法如下所示。
bool sort ( array &array [, int sort_flags] )

该函数会对array进行排序,各元素按值由低到高得顺序排列。sort_flags参数可选,将根据这个参数指定得值修改函数得默认行为。其代表得含义如下所示:

sort_numberic:按数组排序。对整数或浮点数排序时很有用
sort_regular:按照相应得ASCII值对元素排序,例如:这意味这B在a前面
sort_string:按接近于人所认知得正确顺序对元素排序
sort_locale_string:根据当前的区域设置来把单元当作字符串比较
<pre>
<?php
$kids = array("leo","bob","alice","zoy");
echo "原数组";
echo "<br />";
print_r($kids);
echo "使用sort()排序后的数组";
echo "<br />";
sort($kids);
print_r($kids);
?>
</pre>

在这里插入图片描述

使用rsort对数组进行逆向排序

rsort()函数与sort()相同,只是它以相反的顺序(降序)对数组元素排序
bool rsort (array &array [, int sort_flags])

该函数接受一个数组作为输入参数,如果处理成功返回TRUE,否则放回FALSE。如果包括可选的sort_flags参数,那么具体的排序行为将由这个值来确定。

<pre>
<?php
$kids = array("leo","bob","alice","zoy");
echo "原数组";
echo "<br />";
print_r($kids);
echo "使用rsort()排序后的数组";
echo "<br />";
rsort($kids);
print_r($kids);
?>
</pre>

在这里插入图片描述

数组的随机排序

PHP提供一个可对数组进行随机排序的函数shuffle()
bool shuffle ( array &array)
<pre>
<?php
$test_array = array("leo"=>1,"bob"=>2,"alice"=>3,"zoy"=>4);
echo "原数组";
echo "<br />";
print_r($test_array);
echo "使用shuffle随机排序后的数组";
echo "<br />";
shuffle($test_array);
print_r($test_array);
?>
</pre>

第一次排序:
在这里插入图片描述
第二次排序:
在这里插入图片描述

两次结果不同,证明数组被再次随机排序

数组的反向排序

PHP提供了一个array_reverse函数用来对数组进行反向排序的操作。
array array_reverse( array array [, bool preserve_keys] )

该函数接受数组array作为输入返回一个单元为相反顺序的新数组,如果preserve_keys为TRUE则保留原来的键名

<pre>
<?php

$input = array("test",5.0,array("green","red","blue"));	//创键一个多维数组
echo "原数组:";
echo "<br />";
print_r($input);

$result = array_reverse($input);	//对数组逆行排序
echo "使用array_reverse()反向排序后的数组:";
echo "<br />";
print_r($result);

$result_keyed = array_reverse($input, TRUE);	//设置第二个参数为TRUE
echo "使用array_reverse反向排序,而且第二个参数为TRUE的结果";
echo "<br />";
print_r($result_keyed);
?>
</pre>

在这里插入图片描述

合并与拆分数组

合并数组

array_merge()将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数的后面。
array array_merge (array array1 [, array array2 [, array  ...]])

该函数返回作为结果的数组。如果输出的数组中有相同的字符串键名,则该键名后面的值覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

<pre>
<?php
$array1 = array("颜色" => "蓝色", 2, 4);	
$array2 = array("类型","名称","颜色" => "红色","笔刷" => "毛笔",4);
$result = array_merge($array1,$array2);
print_r($result);
?>
</pre>

在这里插入图片描述

拆分数组

array_slice()函数返回根据offset和length参数所指定的array数组中的一段序列
array array_slice(array array, int offset [, int length [, bool preserve_keys]])

如果offset非负,则序列将从array中的此偏移量开始。如果offset为负,则序列从array中距离末端这么远的地方开始

如果给出了length并且为正,则序列中将具有很对的单元,如果给出了length并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从offset开始一直到array的末端

注意:array_slice()默认将重置数组的键。自PHP5.0.2开始,可以通过preserve_keys设为TRUE来 改变此行为
<pre>
<?php
$fruits = array("apple","orange","banana","watermelon","grap","pear");
$output1 = array_slice($fruits,4);	//取第4个以后的数据
$output2 = array_slice($fruits,2,-2);	//取第2个以后且是倒数第2个以前的数据
echo "原数组";
echo "<br />";
print_r($fruits);
echo "取第4个以后的数据";
echo  "<br />";
print_r($output1);
echo "取第2个以后且是倒数第2个以前的数据";
echo "<br />";
print_r($output2);
?>
</pre>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LEO-max

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

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

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

打赏作者

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

抵扣说明:

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

余额充值