PHP 数组 Array

时间:2018-11-15 15:05:17  来源:igfitidea点击:

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