PHP 数组 Array
在本教程中,我们将学习PHP数组,讨论索引数组和关联数组,并向您展示操作数组的各种技术。
PHP数组简介
在PHP中,数组由相关的元素组成,这些元素具有相同的特性。每个数组的元素都有一个键和一个值。
数组中的键可以是字符串或数字。使用键可以查找元素的值。元素的值可以是字符串、数字、布尔值、对象甚至其他数组。
PHP中数组有两种类型:
索引数组
:索引数组的每个元素都是使用数字索引引用的。关联数组
:使用字符串引用关联数组的每个元素。关联数组也称为映射或哈希。
创建数组
与其他编程语言(如C/C++)不同,PHP不需要在创建数组时指定数组的大小。PHP也不需要在使用之前声明数组变量。
要创建数组,请在一对方括号内指定一个键,后跟数组变量,并按如下方式为其赋值:
<?php $languages[0] = 'PHP'; // 一个语言的数组 $languages[1] = 'C'; // 添加第二个元素 $languages[2] = 'Python'; // 添加第三个元素 echo $languages[0]; // 显示第一个元素 echo $languages[1]; // 显示第二个元素 echo $languages[2]; // 显示第三个元素
我们定义了一个包含三个元素的语言数组。它是一个索引数组,因为其元素的值由数值引用。
如果使用数值作为数组的键,则可以在初始化时忽略它们,如下所示:
<?php $languages[] = 'PHP'; // 一个语言的数组 $languages[] = 'C'; // 添加第二个元素 $languages[] = 'Python'; // 添加第三个元素
要创建关联数组,需要显式指定其元素的键。以下示例定义了颜色关联数组:
<?php $colors['red'] = '#FF0000'; $colors['green'] = '#00FF00'; $colors['blue'] = '#0000FF';
使用array()函数创建数组
PHP提供了一个array()函数,用于创建索引数组或关联数组。
以下示例创建了包含三个元素的语言数组:
<?php $language = array('PHP','C','Python');
要创建关联数组,可以使用array()函数,并为每个元素定义显式键,如下所示:
?php $colors = array('red'=>'#FF0000', 'green'=>'#00FF00', 'blue'=>'0000FF');
在PHP 5.4以后的版本,还可以使用短语法[]而不是array()函数,例如:
<?php $color = [ 'red' => '#FF0000', 'green' => '#00FF00', 'blue' => '#0000FF', ];
使用range()函数创建数组
PHP提供了range()函数来帮助您创建一个范围数组,并用值范围内的元素填充它。下面是range()函数:
ange(int low,int high,[optional in step])
您可以指定具有最高值和最低值的范围,以及一个名为step的可选参数,该参数指示元素值之间的距离,默认是1。
例如,要创建一个包含10个整数的数组,可以使用如下的range()函数:
<?php $int_array = range(1,10);
如果要创建一个数组,其中只包含从2到10的偶数,可以使用range()函数如下:
<?php $int_even = range(2,10,2);
显示数组
使用print_r()函数检查整个数组非常方便。请看下面的例子:
<?php // 显示索引数组 $languages = array('PHP','C','Python'); echo '<pre>'; print_r($languages); echo '</pre>'; // 显示关联数组 $colors = array('red'=>'#FF0000', 'green'=>'#00FF00', 'blue'=>'0000FF'); echo '<pre>'; print_r($colors); echo '</pre>';
输出
Array ( [0] => PHP [1] => C [2] => Python ) Array ( [red] => #FF0000 [green] => #00FF00 [blue] => 0000FF )
另一种显示数组的方法是使用var_dump()函数:
<?php // 显示索引数组 $languages = array('PHP','C','Python'); var_dump($languages); // 显示关联数组 $colors = array('red'=>'#FF0000', 'green'=>'#00FF00', 'blue'=>'0000FF'); var_dump($colors);
输出:
array(3) { [0]=> string(3) "PHP" [1]=> string(1) "C" [2]=> string(6) "Python" } array(3) { ["red"]=> string(7) "#FF0000" ["green"]=> string(7) "#00FF00" ["blue"]=> string(6) "0000FF" }
统计数组元素数量
要获取数组中的元素数量,可以使用count()函数。
<?php $int_array = range(1,20); echo '数组元素的数目:' . count($int_array) .'<br/>'; $book = array('title' => 'PHP 教程', 'site' => '之路教程theitroad'); echo '数组元素的数目:' . count($book) .'<br/>';
PHP判断一个变量是否是一个数组
PHP提供了一个名为is_array()的函数,用于测试变量的类型是否为array。
如果变量是数组,则is_array()函数返回true,否则返回false。
让我们看看下面的例子:
<?php $myarray = array("php","c","python"); if(is_array($myarray)) echo '$myarray 是一个数组' . '<br/>'; else echo '$myarray 不是一个数组' . '<br/>'; // $size = 3; if(is_array($size)) echo '$size 是一个数组' . '<br/>'; else echo '$size 不是一个数组' . '<br/>';
PHP添加元素到数组/删除数组中的元素
要向数组中添加新元素,需要为新元素分配一个值,方法是根据数组类型指定数字或字符串索引。
<?php // 使用数值索引添加新元素到数组 $commands[] = "Add"; $commands[] = "Remove"; // 使用字符串索引添加新元素到数组 $colors['blue'] = '#0000FF'; $colors['royalblue'] = '#4169e1';
PHP还提供了一个内置函数array_push(),用于在数组末尾添加一个或多个元素。array_push函数成功时返回true,失败返回false。
请看下面的例子:
<?php $provinces[] = "浙江"; array_push($provinces,'江苏','广东'); var_dump($provinces);
而要在数组的开头添加元素,则可以使用array_unshift()函数。
<?php $provinces = array('江苏','广东'); array_unshift($provinces,'浙江'); var_dump($provinces);
要从数组中删除最后一个元素,可以使用array_pop()函数。
函数将返回被删除的元素:
<?php $provinces = array('浙江','广东','江苏'); $provinces = array_pop($states); echo $provinces; // $province = '江苏'
查找数组元素
PHP检测数组中是否包含某一元素
PHP提供in_array()函数,用于检查元素是否在数组中。
将元素和数组参数传递给函数。如果找到元素,则函数返回true,否则返回false。
还有第三个可选参数,名为strict。如果将此参数传递为true,则该函数不仅将检查元素的值,还将检查元素的数据类型。
in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : bool
请看下面的示例:
<?php $os = array("Mac", "NT", "Irix", "Linux"); if (in_array("Irix", $os)) { echo "Got Irix"; } if (in_array("mac", $os)) { echo "Got mac"; } ?>
PHP检查关联数组的键中是否存在某个键
要检查关联数组中是否存在某个键,可以使用array_key_exists()函数。
如果在数组中找到键,则函数返回true,否则返回false。
<?php $search_array = array('first' => 1, 'second' => 4); if (array_key_exists('first', $search_array)) { echo "The 'first' element is in the array"; } ?>
获取关联数组中的键和值
要在关联数组中获得一组特定的键,可以使用array_keys()函数。
array_keys()函数将返回一个包含数组所有键的数组。
<?php $languages = array( 'France' => 'French', 'England' => 'English', 'India' => 'Indian', 'China' => 'Chinese' ); $country = array_keys($languages); print_r($country);
输出:
Array ( [0] => France [1] => England [2] => India [3] => China )
如果要获取关联数组的所有值,请使用array_values()函数。
<?php $languages = array( 'France' => 'French', 'England' => 'English', 'India' => 'Indian', 'China' => 'Chinese' ); $lang = array_values($languages); print_r($lang);
输出:
Array ( [0] => French [1] => English [2] => Indian [3] => Chinese )
PHP遍历数组
PHP提供了一种非常特殊的循环语句,称为foreach,它允许您对数组进行循环遍历。foreach语句只适用于数组和对象。
遍历索引数组
要遍历索引数组,可以使用以下语法:
<?php foreach ($array_expression as $value) { // 在这里处理$value }
下面的示例循环遍历索引数组并显示每个元素的值:
<?php $pl = array('PHP','Perl','C/C++','C#','Python','Java'); foreach ($pl as $p) { echo $p . '<br/>'; }
遍历关联数组
要循环关联数组,可以使用以下语法:
foreach ($array_expression as $key => $value) { // 在这里处理$key和$value
下面的例子演示了如何循环$address关联数组:
<?php $address = array( 'city' => '杭州', 'province' => '浙江', 'country' => '中国' ); echo '<address>'; foreach ($address as $key => $value) { echo "$key:\t $value" . '<br/>'; } echo '</address>';
PHP数组排序
对索引数组进行排序
PHP提供了两个对索引数组进行排序的函数:sort()和rsort()。
sort()函数对索引数组按升序排序,而rsort()函数对索引数组按降序排序。
要对一个索引数组排序,你需要像下面这样把数组传递给函数:
<?php $pl = array('PHP','Python','C/C++','C#','Perl','Java'); sort($pl); print_r($pl); echo '<br>'; rsort($pl); print_r($pl);
对关联数组进行排序
要对关联数组排序,可以使用这两个函数:asort()和arsort()。
asort()函数对关联数组按升序排序。
arsort()函数对关联数组按降序排序。
注意,如果对关联数组使用sort()或rsort()函数,则关联数组会被转换为索引数组,因此将会丢失每个元素的键及其值之间的关系。
<?php $address = array( 'city' => '杭州', 'province' => '浙江', 'country' => '中国' ); // 按升序排列 asort($address); print_r($address); // 按降序排列 arsort($address); print_r($address);
要根据键的值对关联数组排序,可以使用函数:ksort()和krsort()。
ksort()函数按键的升序对关联数组进行排序。
krsort()函数按键的降序对关联数组进行排序。
<?php $address = array( 'city' => '杭州', 'province' => '浙江', 'country' => '中国' ); // 按升序排列 ksort($address); print_r($address); // 按降序排列 krsort($address); print_r($address);
PHP 合并数组
要将两个或多个数组合并到一个数组中,可以使用array_merge()函数。
下面的例子演示了如何合并两个整数数组:
<?php $a1 = range(1,3); $a2 = range(5,9); // 合并两个数组 $a = array_merge($a1,$a2); print_r($a);
输出:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 )
PHP将索引数组转换为变量列表
PHP提供了一个非常方便的函数list(),它可以帮助您将索引数组中的值赋给一组变量 。
下面的示例演示如何使用list()函数。
<?php $section = array('PHP 教程','PHP 数组'); list($tutorial,$topic) = $section; echo $tutorial . '<br/>'; // PHP 教程 echo $topic . '<br/>'; // PHP 数组
PHP在数组和字符串之间进行转换
PHP将字符串转换为数组
要将字符串转换为数组,可以使用explode()函数。它将根据指定的分隔符分割字符串,并返回一个包含元素的数组,这些元素是分割操作生成的子字符串。
下面的示例使用逗号(,)作为分隔符将字符串转换为数组。结果是一个字符串数组。
<?php $fruits = 'orange,apple,mango,coconut'; $fruits_a = explode(',',$fruits); print_r($fruits_a);
输出:
Array ( [0] => orange [1] => apple [2] => mango [3] => coconut )
PHP将数组转换为字符串
使用implode()函数将数组转换为字符串,如下所示:
<?php $fruits_a = array('orange','apple','mango','coconut'); $fruits = implode(';',$fruits_a); echo $fruits;
输出:
orange;apple;mango;coconut