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()函数添加的数组元素出现在数组的开头。
图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()函数添加数组元素出现在数组的开头。
图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已经被删除。
图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已经被删除。
图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中的相同。
如果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中的相同。
如果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。
如果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所示。
图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的元素。
共有条评论 网友评论