文章教程

4.2.1访问数组元素

9/17/2020 9:38:49 PM 人评论 次浏览

4.2 数组元素

数组由数组元素组成。对数组的管理就是对数组元素的访问和操作。

4.2.1 访问数组元素

可以通过下面的方法获取一维数组元素的值:

$数组名[key]

如果是多维数组,则可以使用多个[key]来获取数组元素的值。例如,获取二维数组元素的值的方法如下:

$数组名[key] [key]

【例4-9】 一个访问一维数组元素的例子。

<?PHP

$arr = array("CPU", "内存", "硬盘");

echo($arr[2])

?>

运行结果为“硬盘”。

4.2.2 添加数组元素

前面介绍了通过赋值添加数组元素的方法,本小节再介绍两个可以添加数组元素的系统函数。

1.array_unshift()函数

array_unshift()函数的功能是在数组开头插入一个或多个元素,用于以整数为键的数组。array_unshift()函数的基本语法如下:

array_unshift( $数组名, 添加的数组值1, …, 添加的数组值n)

【例4-10】 一个使用array_unshift()函数添加数组元素的例子。

<?php

$queue = array("orange", "banana");

array_unshift($queue, "apple", "raspberry");

print_r($queue);

?>

运行结果如图4-6所示。可以看到,使用array_unshift()函数添加的数组元素出现在数组的开头。

figure_0082_0132

图4-6 例4-10的运行结果

2.array_push()函数

array_ push()函数的功能是在数组末尾插入一个或多个元素,用于以整数为键的数组。array_push()函数的基本语法如下:

array_ push( $数组名, 添加的数组值1, …, 添加的数组值n)

【例4-11】 一个使用array_ push()函数添加数组元素的例子。

<?php

$stack = array("orange", "banana");

array_push($stack, "apple","raspberry");

print_r($stack);

?>

运行结果如图 4-7 所示。可以看到,使用 array_unshift()函数添加数组元素出现在数组的开头。

figure_0082_0133

图4-7 例4-11的运行结果

4.2.3 删除数组元素

本小节介绍两个删除数组元素的系统函数。

1.array_shift()函数

array_shift()函数的功能是从数组头删除一个元素,用于以整数为键的数组。array_shift()函数的基本语法如下:

mixed array_shift (array &$array)

函数返回被删除的数组元素。调用array_shift()函数后,数组$array的第1个元素被删除。

【例4-12】 使用array_shift()函数删除数组元素的例子。

<?php

$stack = array("orange", "banana", "apple", "raspberry");

$fruit = array_shift($stack);

echo($fruit);

echo("<BR>");

print_r($stack);

?>

运行结果如图4-8所示。可以看到,数组$stack的第1个元素orange已经被删除。

figure_0083_0134

图4-8 例4-12的运行结果

2.array_pop()函数

array_pop()函数的功能是从数组末尾删除一个元素,用于以整数为键的数组。array_pop()函数的基本语法如下:

mixed array_pop (array &$array)

函数返回被删除的数组元素。调用array_pop()函数后,数组$array的最后1个元素被删除。

【例4-13】 一个使用array_pop()函数删除数组元素的例子。

<?php

$stack = array("orange", "banana", "apple", "raspberry");

$fruit = array_pop($stack);

echo($fruit);

echo("<BR>");

print_r($stack);

?>

运行结果如图4-9所示。可以看到,数组$stack的最后1个元素raspberry已经被删除。

figure_0083_0135

图4-9 例4-13的运行结果

4.2.4 定位数组元素

本小节介绍搜索数组,定位数组元素的方法。

1.在搜索数组中是否存在指定值

可以使用in_array ()函数检查数组中是否存在某个值。其基本语法如下:

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

in_array()函数的功能是在数组 haystack 中搜索 needle。如果找到则返回 TRUE,否则返回FALSE。如果第 3 个参数 strict 的值为 TRUE,则 in_array()函数还会检查 needle 的类型是否和haystack中的相同。

figure_0083_0136

如果needle是字符串,则比较是区分大小写的。

【例4-14】 使用in_array()函数搜索数组的例子。

<?php

$language = array("PHP", "ASP", "ASP.NET");

if (in_array("ASP", $language)) {

echo "找到了ASP";

}

if (in_array("php", $language)) {

echo "找到了php";

}

?>

运行结果如下:

找到了ASP

因为搜索是区分大小写的,所以没有找到字符串"php"。

2.在搜索数组中指定值对应的键

可以使用array_search()函数在数组中搜索给定的值,如果成功则返回相应的键名。其基本语法如下:

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

array_search()函数的功能是在数组 haystack 中搜索 needle。如果找到则返回相应的键名,否则返回 FALSE。如果第3个参数strict的值为TRUE,则array_search()函数还会检查needle的类型是否和haystack中的相同。

figure_0084_0137

如果needle在haystack中出现不止一次,则返回第一个匹配的键;如果needle是字符串,则比较是区分大小写的。

【例4-15】 使用array_search()函数搜索数组的例子。

<?php

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;

echo($key);

$key = array_search('red', $array); // $key = 1;

echo($key);

?>

运行如下:

2

1

3.检查数组中是否存在指定键

可以使用array_key_exists()函数检查数组中是否存在某个键。其基本语法如下:

bool array_key_exists ( mixed $key , array $search )

array_key_exists()函数的功能是在数组search中搜索键key。如果找到则返回TRUE,否则返回FALSE。

figure_0084_0138

如果needle是字符串,则比较是区分大小写的。

【例4-16】 使用array_key_exists()函数检查数组中是否存在某个键的例子。

<?php

$search_array = array('first' => 1, 'second' => 4);

if (array_key_exists('first', $search_array)) {

echo "键'first'在数组中存在";

}

?>

运行如下:

键'first'在数组中存在找到了ASP

4.返回所有的键

可以使用array_keys()函数返回数组中的所有键。其基本语法如下:

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

array_key_ keys ()函数的功能是返回数组input中的数字或者字符串的键名。如果指定了可选参数search_value,则只返回该值对应的键名;否则input 数组中的所有键名都会被返回。可以用strict参数来指定进行全等比较(===)。

【例4-17】 使用array_keys()函数的例子。

<?php

$array = array(0 => 100, "color" => "red");

print_r(array_keys($array));

$array = array("blue", "red", "green", "blue", "blue");

print_r(array_keys($array, "blue"));

?>

运行如下:

Array ( [0] => 0 [1] => color )

Array ( [0] => 0 [1] => 3 [2] => 4 )

5.返回所有的值

可以使用array_values()函数返回数组中的所有值。其基本语法如下:

array array_values ( array $input)

array_key_values()函数的功能是返回 input 数组中所有的值并给其建立数字索引。

【例4-18】 使用array_values()函数的例子。

<?php

$array = array("size" => "XL", "color" => "gold");

print_r(array_values($array));

?>

运行如下:

Array ( [0] => XL [1] => gold )

4.2.5 遍历数组元素

遍历数组就是一个一个地访问数组元素,这是使用数组时的常用操作。

1.获取数组的元素数量

调用count()函数可以获取数组的元素数量,其语法如下:

int count(array $arr)

函数返回数组$arr的元素数量。也可以使用count()函数的别名sizeof()来获取数组的元素数量。

2.数组指针

数组指针指向一个数组元素,每个数组中都有一个内部的指针指向它“当前的”数组元素,可以使用数组指针函数实现遍历数组的功能。使用current()函数可以获取当前指针下的数组元素,其语法如下:

mixed current ( array &$array )

current()函数返回当前被内部指针指向的数组元素的值,并不移动指针。如果内部指针指向超出了单元列表的末端,current()函数返回FALSE。

使用next()函数可以将数组指针移动到下一个位置,其语法如下:

mixed next( array &$array )

next()函数和current()函数的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。也就是说,它返回的是下一个数组单元的值并将数组指针向前移动了一位。如果移动指针的结果是超出了数组单元的末端,则next()返回FALSE。

【例4-19】 使用next()函数和current()函数移动数组指针遍历数组元素。

<?PHP

$emp = array('王二', '张三', '李四', '王五');

echo(current($emp));

for($i=0; $i<sizeof($emp); $i++) {

echo(" " . next($emp));

}

?>

程序的运行结果如下:

王二 张三 李四 王五

调用end()函数可以将数组指针移动到最后一个单元,并返回该单元,其语法如下:

mixed end( array &$array )

调用prev()函数可以将数组指针倒回一位,其语法如下:

mixed prev ( array &$array )

【例4-20】 使用end()函数和prev()函数移动数组指针倒序遍历数组元素。

<?PHP

$emp = array('王二', '张三', '李四', '王五');

echo(end ($emp));

for($i=0; $i<sizeof($emp); $i++) {

echo(" " . prev($emp));

}

?>

程序的运行结果如下:

王五李四张三王二

调用reset()函数可以将数组指针指向第一个元素,并返回第一个数元素的值,其语法如下:

mixed reset ( array &$array )

【例4-21】 使用reset ()函数移动数组指针的例子。

<?PHP

$emp = array('王二', '张三', '李四', '王五');

echo(end($emp));

echo("<BR>");

echo(reset($emp));

?>

程序的运行结果如下:

王五

王二

各数组指针函数的功能如图4-10所示。

figure_0087_0139

图4-10 各数组指针函数的功能演示

3.使用foreach语句来遍历数组元素

可以使用foreach语句来遍历数组元素,方法如下:

foreach ( 数组 as $value) {

语句块

}

在foreach语句中,数组的每一个元素都会被循环处理一遍,在每次循环中,当前数组元素的值被赋予$value并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个数组元素)。

【例4-22】 使用foreach语句遍历数组元素。

<?PHP

$emp = array('王二', '张三', '李四', '王五');

foreach($emp as $val) {

echo( "$val ");

}

?>

程序的运行结果如下:

王二张三李四王五

4.2.6 确定唯一的数组元素

调用array_unique()函数可以过滤掉数组中的重复元素,从而确定唯一的数组元素,其语法如下:

array array_unique( array $array )

函数对数组$array进行处理,过滤掉数组中的重复元素,返回没有重复值的新数组。

【例4-23】 使用array_unique()函数的例子。

<?php

$input = array("a" => "green", "red", "b" => "green", "blue", "red");

$result = array_unique($input);

print_r($result);

?>

程序的运行结果如下:

Array ( [a] => green [0] => red [1] => blue )

可以看到,如果存在重复元素,会保留最早出现的元素,后面的重复元素会被过滤掉。

在过滤数组元素时,函数会首先将元素值转换成string类型,再进行比较。也就是说4和"4"在比较时是相同的。

【例4-24】 使用array_unique()函数过滤数组元素的另一个例子。

<?php

$input = array(4, "4", "3", 4, 3, "3");

$result = array_unique($input);

var_dump($result);

?>

程序的运行结果如下:

array (size=2)

0 => int 4

2 => string '3' (length=1)

因为在比较数组元素时,4和"4"相同,3和"3"相同,且只保留最先出现的因素,所以结果中只有键为0和2的元素。

教程类别