首页 > 编程笔记 > PHP笔记 阅读:15

PHP数组的定义和使用(非常详细)

数组(array)是 PHP 中最强大的开发工具之一,与很多编程语言不同的是,PHP 中数组的成员是“键/值”对应的格式,在一些开发环境中常称为 Map、Dictionary 等。

创建数组时,可以使用 array 语句结构,应用格式如下:
$arr = array(key1=>value1, key2=>value2, key3=>value3,...);
其中,数组的多个成员使用逗号分隔;每个成员由=>运算符分为两部分,左侧是成员的名称,也称为键(key),右侧是成员的数据,也称为值(value)。

下面的代码演示了数组的定义和成员访问。
<?php
$planet = array("earth"=>"地球","mars"=>"火星");
echo $planet["earth"];
echo "<br>";
echo $planet["mars"];
?>
代码执行会显示:

地球
火星

本例中定义了 $planet 数组,其中包含两个成员,名称(键)分别是 earth 和 mars。访问成员的数据时,需要在数组对象后的一对方括号中指定相应的名称(键)。需要注意的是,成员的名称(键)是区分字母大小写的,也就是说 Earth 和 earth 是不同的名称,表示不同的数组成员。

PHP 中的数组也可以使用简化形式,即不指定成员的名称(键),此时,成员的名称(键)会自动设置为从 0 开始的整数。下面的代码演示了此类数组的定义和成员访问。
<?php
$arr = array("a","b","c");
foreach($arr as $e)
{
    echo $e,"<br>";
}
?>
代码执行会显示 a、b、c。本例通过 foreach 语句遍历了所有的数组成员,下面的代码会通过整数索引访问数组成员。
<?php
$arr = array("a","b","c");
$count = count($arr);
for($i=0;$i<$count;$i++)
{
    echo $arr[$i],"<br>";
}
?>
代码中,首先使用 count() 函数获取数组成员的数量;然后通过 for 语句访问了索引值从 0 到成员数量减一的成员。代码执行同样会显示 a、b、c。

从 PHP 5.4 版本开始,可以直接使用一对方括号来定义数组,如下面的代码:
<?php
$arr = [1,1,2,3,5,8];
for($i=0; $i<6; $i++)
{
    echo $arr[$i],"<br />";
}
?>
生成数组的成员是连续的数据时(如整数、字母),可以使用 range() 函数,如下面的代码:
<?php
print_r(range(1,5));
echo "<br>";
print_r(range("a","d"));
?>
代码执行结果显示,创建了数字 1 到 5,以及字母 a 到 d 的数组:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
Array ( [0] => a [1] => b [2] => c [3] => d )


接下来介绍一些常用的数组操作函数。

PHP数组常用函数

count() 和 sizeof() 函数,返回数组中的成员数量。

array_key_exists() 和 key_exists() 函数,判断指定的键是否存在,但在实际应用中,推荐使用 isset() 函数判断数组成员是否存在,如 isset($arr[key])。in_array() 函数判断数组中是否存在指定的值,下面的代码演示了相关的应用。
<?php
$arr = array("earth"=>"地球","mars"=>"火星","jupiter"=>"木星");
var_dump(array_key_exists("earth",$arr));  // var_dump(isset($arr[“earth”]));
var_dump(array_key_exists("moon",$arr));   // var_dump(isset($arr["moon"]));
var_dump(in_array("火星",$arr));
var_dump(in_array("月亮",$arr));
?>
代码执行结果为:

bool(true) bool(false) bool(true) bool(false)


此外,in_array() 函数还可以使用第三个参数,默认值为 false,只判断数据的字符串形式是否相同;如果设置为 true,会判断数据的类型和值是否完全一致,如下面的代码。
<?php
$arr=range(1,5);
var_dump(in_array("3",$arr));
var_dump(in_array("3",$arr,true));
?>
代码执行结果为:

bool(true) bool(false)


array_change_key_case() 函数将数组中的所有键修改为大写或小写,函数定义格式如下:
array_change_key_case(array $array[, int $case = CASE_LOWER]) : array
其中,参数 $array 指定需要操作的数组;参数 $case 指定键是转换为大写还是小写,默认是小写,转换为大写时使用 CASE_UPPER 常量,函数会返回修改后的数组。

下面的代码演示了 array_change_key_case() 函数的应用。
<?php
$arr = array("earth"=>"地球","mars"=>"火星","jupiter"=>"木星");
print_r(array_change_key_case($arr,CASE_UPPER));
?>
代码执行结果为:

Array( [EARTH] => 地球 [MARS] => 火星 [JUPITER] => 木星)


array_key_first() 函数返回数组第一个成员的键,array_key_last() 函数返回数组中最后一个成员的键。下面的代码演示了这两个函数的使用:
<?php
$arr = array("earth"=>"地球","mars"=>"火星","jupiter"=>"木星");
echo array_key_first($arr),"<br>";
echo array_key_last($arr);
?>
执行代码将显示 earth 和 jupiter。

array_keys() 函数可以返回所有键组成的新数组。返回的数组中,成员使用 0 开始的索引,数据为原数组的键。下面的代码演示了 array_keys() 函数的应用:
<?php
$arr = array("earth"=>"地球","mars"=>"火星","jupiter"=>"木星");
$keys = array_keys($arr);
print_r($keys);
?>
代码执行结果为:

Array( [0] => earth [1] => mars [2] => jupiter)


array_values() 函数会返回所有的值组成的新数组,新数组成员的键使用从 0 开始的数值索引,下面的代码展示了此函数的应用。
<?php
$arr = array("earth"=>"地球","mars"=>"火星","jupiter"=>"木星");
$arr1 = array_values($arr);
print_r($arr);
echo "<br>";
print_r($arr1);
?>
代码执行结果为:

Array( [earth] => 地球 [mars] => 火星 [jupiter] => 木星)
Array( [0] => 地球 [1] => 火星 [2] => 木星)


array_pad() 函数将数组成员扩充到指定的数量,其定义如下:
array_pad(array $array, int $size, mixed $value) : array
函数的功能是将 $array 成员数量使用 $value 填充到 n 个(n 为 $size 的绝对值)。当 $size 为正数时,新成员填充到原数组成员的后面;当 $size 为负数时,填充到原数组成员的前面;函数会返回修改后的新数组。

下面的代码演示了 array_pad() 函数的应用。
<?php
$arr = array("a","b");
$arr1 = array_pad($arr,4,"*");
print_r($arr1);
echo "<br>";
$arr2 = array_pad($arr,-4,"*");
print_r($arr2);
?>
代码执行结果为:

Array( [0] => a [1] => b [2] => * [3] => *)
Array( [0] => * [1] => * [2] => a [3] => b)


array_replace() 函数使用后续数组成员替换第一个数组的成员,同名(键相同)成员会使用最后一个给出的数据,并会添加第一个数组中不存在(键)的成员。函数会返回重新生成的数组。下面的代码演示了此函数的使用。
<?php
$arr1 = [1,2,3];
$arr2 = [1=>1,2=>1];
$arr3 = [1,2,3,4,5];
print_r(array_replace($arr1,$arr2));
echo "<br>";
print_r(array_replace($arr1,$arr2,$arr3));
?>
代码执行结果为:

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

本例中,$arr1 数组成员的索引分别是 0、1、2;$arr2 中指定索引 1 和 2 的成员数据都为 1,这样就替换了 $arr1 中的第二和第三成员,第一个输出的数组成员数据就是 1、1、1;第二个输入,$arr3 为最后设置的数组,索引 0、1、2 的成员会替换 $arr1 中的成员,然后添加索引为 3 和 4 的成员。

array_search() 函数在数组中搜索给定的值,如果成功则返回首个对应的键。函数定义如下:
array_search(mixed $needle, array $haystack[, bool $strict = false]) : mixed
函数的功能是在 $haystack 中查找值为 $needle 的成员,并返回它的键。$strict 参数为 true 时,将严格比较值的类型和数据;如果没有找到 $needle 指定的值,函数返回 false。对于函数执行的结果,应使用全等运算符进行判断。

下面的代码演示了 array_search() 函数的使用。
<?php
$arr = ["123",456];
$result = array_search(123,$arr);
if($result===false) echo "数据没找到";
else echo $result;
?>
代码执行后会显示 0,即第一个成员的索引值(键)。

相关文章