PHP数组的定义和使用(非常详细)
创建数组时,可以使用 array 语句结构,应用格式如下:
$arr = array(key1=>value1, key2=>value2, key3=>value3,...);其中,数组的多个成员使用逗号分隔;每个成员由=>运算符分为两部分,左侧是成员的名称,也称为键(key),右侧是成员的数据,也称为值(value)。
下面的代码演示了数组的定义和成员访问。
<?php $planet = array("earth"=>"地球","mars"=>"火星"); echo $planet["earth"]; echo "<br>"; echo $planet["mars"]; ?>代码执行会显示:
地球
火星
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)
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,即第一个成员的索引值(键)。