PHP数组

时间:2020-02-23 14:42:00  来源:igfitidea点击:

在本教程中,我们将学习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);