PHP数组
在本教程中,我们将学习PHP中的数组。
什么是数组?
数组是可以包含多个值的单个变量。
数组的每个值称为数组的元素。
PHP中的数组类型
PHP中有两种类型的数组。
- 索引数组
- 关联数组
索引数组
这是数组类型,其中每个元素都由从0开始的数字索引引用。
因此,第一个元素位于索引0,第二个元素位于索引1,依此类推。
关联数组
这是arry类型,其中每个元素都由字符串索引引用。
这种类型的也称为哈希或者映射。
创建一个数组
为了创建一个数组,我们使用" array()"函数,并将元素以逗号分隔。
要创建索引数组,我们使用以下语法。
$index_arr = array("Batman", "Superman", "Wonder Woman", "Justice League");
要创建一个关联数组,我们使用以下语法。
$assoc_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder" );
访问数组元素
要访问索引数组的元素,我们使用数字索引。
$index_arr = array("Batman", "Superman", "Wonder Woman", "Justice League"); echo $index_arr[2];
上面的代码将打印" Wonder Woman"。
要访问关联数组的元素,我们使用字符串索引。
$assoc_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder" ); echo $assoc_arr['movie'];
上面的代码将打印"蝙蝠侠对超人:正义曙光"。
向数组添加元素
要将新元素添加到索引数组,我们使用以下语法。
$index_arr = array("Batman", "Superman", "Wonder Woman", "Justice League"); //add new element $index_arr[] = "Iron Man";
要将新元素添加到关联数组,我们使用以下语法。
$assoc_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder" ); //adding release data $assoc_arr['release'] = "March 25, 2015";
更改数组的元素
要更改索引数组的任何元素,我们需要以其数字索引为目标。
$index_arr = array("Batman", "Superman", "Wonder Woman", "Justice League"); //chaning the 4th element of the array //remember array index starts from 0 $index_arr[3] = "Iron Man";
要更改关联数组的任何元素,我们需要以其字符串索引作为目标。
$assoc_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder", "release" => "2015" ); //changing the release element $assoc_arr['release'] = "March 25, 2015";
输出数组-print_r()
我们使用print_r()函数来详细输出数组的内容。
在下面的示例中,我们使用print_r()输出索引数组的详细信息。
$index_arr = array("Batman", "Superman", "Wonder Woman", "Justice League"); print_r($index_arr);
Array ( [0] => Batman [1] => Superman [2] => Wonder Woman [3] => Justice League )
在下面的示例中,我们使用print_r()输出关联数组的详细信息。
$assoc_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder" ); print_r($assoc_arr);
Array ( [movie] => Batman v Superman: Dawn of Justice [director] => Zack Snyder )
计数数组的元素-count()
我们使用count()
函数来查找数组中元素的总数。
$index_arr = array("Batman", "Superman", "Wonder Woman", "Justice League"); echo count($index_arr);
上面的代码将打印4。
使用foreach()遍历数组
要遍历数组的所有元素,我们可以使用foreach循环。
在下面的示例中,我们使用foreach循环遍历索引数组。
$index_arr = array("Batman", "Superman", "Wonder Woman", "Justice League"); foreach ($index_arr as $elem) { printf("%s\n", $elem); }
上面的代码将打印索引数组$index_arr的所有元素。
Batman Superman Wonder Woman Justice League
在下面的示例中,我们使用foreach循环遍历关联数组。
$assoc_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder" ); foreach ($assoc_arr as $key => $value) { printf("key = %s ---- Value = %s\n", $key, $value); }
上面的代码将使用键值对打印所有元素。
Key = movie ---- Value = Batman v Superman: Dawn of Justice Key = director ---- Value = Zack Snyder
创建多维数组
为了创建多维索引数组,我们使用以下内容。
$m_index_arr = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9) ); print_r($m_index_arr);
在上面的代码中,我们创建了一个具有3行3列的2D索引数组,因此共有9个元素。
接下来是输出。
Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [1] => Array ( [0] => 4 [1] => 5 [2] => 6 ) [2] => Array ( [0] => 7 [1] => 8 [2] => 9 ) )
要创建多维关联数组,请使用以下内容。
$m_assoc_arr = array( array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder" ), array( "movie" => "Wonder Woman", "director" => "Patty Jenkins" ), array( "movie" => "Justice League", "director" => "Zack Snyder" ) ); print_r($m_assoc_arr);
在上面的代码中,我们创建了一个具有3行2列的2D关联数组(电影,导演),因此共有6个元素。
接下来是输出。
Array ( [0] => Array ( [movie] => Batman v Superman: Dawn of Justice [director] => Zack Snyder ) [1] => Array ( [movie] => Wonder Woman [director] => Patty Jenkins ) [2] => Array ( [movie] => Justice League [director] => Zack Snyder ) )
使用foreach()访问多维数组
要访问多维索引数组,我们使用以下方法。
$m_index_arr = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9) ); foreach ($m_index_arr as $row) { //get each row foreach ($row as $elem) { //get each element of the row printf("%d\n", $elem); } }
要访问多维关联数组,我们使用以下内容。
$m_assoc_arr = array( array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder" ), array( "movie" => "Wonder Woman", "director" => "Patty Jenkins" ), array( "movie" => "Justice League", "director" => "Zack Snyder" ) ); foreach ($m_assoc_arr as $row) { //get the row foreach ($row as $key => $value) { //get element of each row printf("%s = %s\n", $key, $value); } }
排序索引数组
为了使索引数组升序排序,我们使用了sort()函数。
如果排序成功,此函数将返回" true"。
如果有任何错误,它将返回" false"。
$index_arr = array("Batman", "Superman", "Wonder Woman", "Justice League"); sort( $index_arr ); print_r( $index_arr );
Array ( [0] => Batman [1] => Justice League [2] => Superman [3] => Wonder Woman )
为了使元素降序排序,我们使用rsort()
函数。
$index_arr = array("Batman", "Superman", "Wonder Woman", "Justice League"); rsort( $index_arr ); print_r( $index_arr );
Array ( [0] => Wonder Woman [1] => Superman [2] => Justice League [3] => Batman )
排序关联数组
为了使关联数组升序排序并保留键,我们使用了asort
函数。
$assoc_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder", "release" => "2015" ); asort( $assoc_arr ); print_r( $assoc_arr );
Array ( [release] => 2015 [movie] => Batman v Superman: Dawn of Justice [director] => Zack Snyder )
If we use sort()
function then key is lost.
$assoc_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder", "release" => "2015" ); sort( $assoc_arr ); print_r( $assoc_arr );
Array ( [0] => 2015 [1] => Batman v Superman: Dawn of Justice [2] => Zack Snyder )
因此,我们可以看到asort()
函数保留了关联数组的键,而sort
函数没有保留。
为了按降序对关联数组元素进行排序,我们使用了arsort()
函数。
按键对关联数组进行排序
为了使用键对关联数组进行升序排序,我们使用了ksort()函数。
$assoc_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder", "release" => "2015" ); ksort( $assoc_arr ); print_r( $assoc_arr );
Array ( [director] => Zack Snyder [movie] => Batman v Superman: Dawn of Justice [release] => 2015 )
为了使用key降序对关联数组进行排序,我们使用krsort()
函数。
添加和删除元素
我们使用array_push()函数在数组末尾添加一个或者多个元素。
$index_arr = array("Batman", "Superman"); array_push($index_arr, "Wonder Woman"); print_r($index_arr);
上面的代码将在$index_arr的末尾添加" Wonder Woman"。
我们使用array_pop()函数从数组末尾删除元素。
$index_arr = array("Batman", "Superman", "Iron Man"); echo array_pop($index_arr); //this will print "Iron Man" as it is popped print_r($index_arr); //this will print only two elements.
为了在数组的开头添加一个或者多个元素,我们使用了array_unshift()函数。
$index_arr = array("Batman", "Superman"); array_unshift($index_arr, "Wonder Woman", "Justice League"); print_r($index_arr);
上面的代码将在数组的开头添加两个元素。
为了从数组的开头删除元素,我们使用array_shift()
函数。
$index_arr = array("Iron Man", "Batman"); echo array_shift($index_arr); //this will print "Iron Man" print_r($index_arr); //this will print only one element.
获取数组的一部分-array_slice()
该函数有3个参数。
第一个是数组变量,第二个是起始索引,最后一个参数是要采用的元素数。
该函数将返回一个新数组,并且原始数组将保持不变。
$index_arr = array("Batman", "Superman", "Wonder Woman", "Justice League"); $slice_arr = array_slice( $index_arr, 1, 2); print_r( $slice_arr );
Array ( [0] => Superman [1] => Wonder Woman )
使用array_splice()删除和添加元素
我们使用array_splice()删除数组的一部分并向其中添加元素。
此函数有4个参数。
第一个参数用于数组。
第二个参数用于起始索引。
如果它为正,则起始索引从输入数组的开头开始。
如果它为负,则起始索引从输入数组的末尾开始。
第三个参数是长度。
如果为正,则将删除许多元素。
如果它是负数,则删除的部分将是输入数组末尾那么多的元素。
如果长度为零,则不会删除任何元素。
最后,如果省略了长度,则删除起始索引中的所有元素。
第四个参数用于替换数组。
以下是一些示例。
从索引2中删除所有元素。
$input = $input = array("Batman", "Superman", "Iron Man", "Wonder Woman", "Justice League"); array_splice($input, 2); //Array ( [0] => Batman [1] => Superman) print_r($input);
从末尾删除索引2中的所有元素。
$input = array("Batman", "Superman", "Iron Man", "Wonder Woman", "Justice League"); array_splice($input, -2); //Array ( [0] => Batman [1] => Superman [2] => Iron Man ) print_r($input);
从索引2中删除1个元素。
$input = array("Batman", "Superman", "Iron Man", "Wonder Woman", "Justice League"); array_splice($input, 2, 1); //Array ( [0] => Batman [1] => Superman [2] => Wonder Woman [3] => Justice League ) print_r($input);
从末尾的索引2中删除1个元素。
$input = array("Batman", "Superman", "Iron Man", "Wonder Woman", "Justice League"); array_splice($input, -2, 1); //Array ( [0] => Batman [1] => Superman [2] => Iron Man [3] => Justice League ) print_r($input);
从索引2中删除1个元素,然后插入新的替换元素。
$input = array("Batman", "Superman", "Iron Man", "Wonder Woman", "Justice League"); $repl_arr = array("Hulk"); array_splice($input, 2, 1, $repl_arr); //Array ( [0] => Batman [1] => Superman [2] => Hulk [3] => Wonder Woman [4] => Justice League ) print_r($input);
合并数组
我们使用array_merge()函数合并两个数组。
在下面的示例中,我们将合并两个索引数组。
$movie1_arr = array("Batman", "Superman"); $movie2_arr = array("Wonder Woman", "Justice League"); $final_arr = array_merge($movie1_arr, $movie2_arr); //Array ( [0] => Batman [1] => Superman [2] => Wonder Woman [3] => Justice League ) print_r($final_arr);
在下面的示例中,我们将合并两个具有不同键的关联数组。
$movie1_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder" ); $movie2_arr = array( "release" => "March 25, 2015" ); $final_arr = array_merge($movie1_arr, $movie2_arr); //Array ( [movie] => Batman v Superman: Dawn of Justice [director] => Zack Snyder [release] => March 25, 2015 ) print_r($final_arr);
array_merge()
函数保留关联的数组键。
在下面的示例中,我们将合并两个具有相同键的关联数组。
在这种情况下,现有密钥将被覆盖。
$movie1_arr = array( "movie" => "Batman v Superman: Dawn of Justice", "director" => "Zack Snyder" ); $movie2_arr = array( "movie" => "Wonder Woman", "director" => "Patty Jenkins" ); $final_arr = array_merge($movie1_arr, $movie2_arr); //Array ( [movie] => Wonder Woman [director] => Patty Jenkins ) print_r($final_arr);
数组到字符串的转换
我们使用implode()函数将数组转换为字符串。
该函数有两个参数。
第一个是用于将字符串中的数组元素粘合在一起的字符,第二个参数是要转换的数组。
$movie = array("Batman", "Superman", "Wonder Woman"); $str = implode(" -- ", $movie); //Batman -- Superman -- Wonder Woman printf($str);
字符串到数组的转换
我们使用explode()
函数将字符串转换为数组。
该函数有两个参数。
首先是一组用于分割字符串的字符。
第二个参数是字符串。
$str = "Batman,Superman,Wonder Woman,Justice League,Iron Man"; $arr = explode(",", $str); //Array ( [0] => Batman [1] => Superman [2] => Wonder Woman [3] => Justice League [4] => Iron Man ) print_r($arr);
数组到变量列表的转换
我们使用list()函数将数组转换为变量列表。
这是将数组的值分配给变量的快速简便的方法。
$arr = array("Batman v Superman: Dawn of Justice", "Zack Snyder"); list($movie, $director) = $arr; //Movie = Batman v Superman: Dawn of Justice and Director = Zack Snyder printf("Movie = %s and Director = %s", $movie, $director);