当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

5.2.1直接将变量声明为数组元素

9/17/2020 9:37:07 PM 人评论

5.2.1直接将变量声明为数组元素

5.2 一维数组的创建

当一个变量承载多个选项(例如“兴趣爱好”选项有35项之多或表中的一条记录有多个列)时,经常使用一维数组保存这些选项。PHP中有两种创建一维数组的方法:直接将变量声明为数组元素和使用array()语言结构创建数组。

5.2.1 直接将变量声明为数组元素

将一个变量声明为一个数组元素有以下3种方法。

方法1 不指定数组元素的“键”

示例程序:$characters[ ] = "humour";

上面的PHP语句定义了一个名字为$characters的数组,并向该数组中添加了一个数组元素。方括号“[ ]”定义的是该数组元素的“键”,该键对应的“值”为字符串“humour”。当数组新元素的“键”没有指定时,新元素的“键”在已有元素最大整数“键”的基础上递增(数组没有整数“键”时,则从零开始递增)。例如程序createArray1.php如下。

<?php

$characters[] = "humour";

$characters[] = "optimism";

print_r($characters); //输出:Array ( [0] => humour [1] => optimism )

?>

程序createArray1.php中的print_r()函数按照“[键]=>值”的格式显示数组的内容,该程序运行过程中的内存分配图如图5-2所示。

figure_0077_0111
图5-2 数组元素在内存中的动态分配

方法 2 将数组元素的“键”指定为某个整数

示例程序:$interests[2] = "music";

上面的 PHP 语句定义了一个名字为$interests的数组,并向该数组中添加了一个数组元素。“[2]”定义的是该数组元素的“键”为整数2,该“键”所对应的“值”为字符串“music”。例如如下程序createArray2.php,该程序运行过程中的内存分配图如图5-3所示。

figure_0078_0112
图5-3 数组元素在内存中的动态分配

<?php

$interests[2] = "music";

$interests[5] = "movie";

$interests[1] = "computer";

$interests[] = "software";

print_r($interests);/*输出:Array ( [2] => music [5] => movie [1] => computer [6] => software )*/

?>

程序createArray2.php说明如下。

(1)PHP数组是一个“有序”的容器,数组按照向数组添加元素的顺序进行输出,而不是按照“键”的大小进行输出,可以将数组的这个特性称为数组元素的有序性。

(2)PHP数组中的每个元素是一个“键值对”(key=>value)。

(3)PHP数组中的整数“键”不要求必须连续。

方法3 将数组元素的“键”指定为某个字符串

示例程序:$colors["red"] = "red";

上面的 PHP 语句定义了一个名字为$colors 的数组,并向该数组中添加了一个数组元素。“["red"]”定义的是该数组元素的“键”为字符串"red",该“键”所对应的值为字符串"red"。例如如下程序createArray3.php,该程序运行过程中的内存分配图如图5-4所示。

figure_0078_0113
图5-4 数组元素在内存中的动态分配

<?php

$colors["red"] = "red";

$colors["green"] = "green";

$colors[3] = "white";

$colors[] = "blue";

print_r($colors); //输出:Array ( [red] => red [green] => green [3] => white [4] => blue )

?>

5.2.2 使用array()语言结构创建数组

使用前面的方法创建数组时,每一条赋值语句仅为数组添加一个元素,显然有点儿笨拙,PHP提供了array()语言结构创建数组, array() 语言 结构接受一定数量用逗号分隔的 key => value 参数对,这样可以一次性地为数组添加多个元素(若key省略,则key值为整数)。例如程序createArray4.php如下,请读者自行分析其内存分配图。

<?php

$colors = array("red"=>"red","green",3=>"white",5);

print_r($colors); //输出:Array ( [red] => red [0] => green [3] => white [4] => 5 )

?>

程序createArray4.php和下面的程序功能等价。

<?php

$colors["red"] = "red";

$colors[] = "green";

$colors[3] = "white";

$colors[] = 5;

print_r($colors); //输出:Array ( [red] => red [0] => green [3] => white [4] => 5 )

?>

5.2.3 创建数组的注意事项

创建数组时需要注意以下几个事项。

(1)如果数组元素中的“键”是一个浮点数,则“键”将被强制转换为整数(例如浮点数 8.0将被强制转换为整数8);如果“键”是TRUE或FALSE,则“键”将被强制转换为整数1或0。

(2)如果数组元素中的“键”是一个字符串,且该字符串完全符合整数格式时,数组元素的“键”将被强制转换为整数(例如 "9" 将被强制转换为整数9)。

(3)由于数组元素中的“键”唯一标识一个元素,因此数组中元素的“键”不能相等(使用= =比较)。如果两个数组元素的“键”相等,“键”对应的“值”将被覆盖。例如如下程序createArray5.php,该程序运行过程中的内存分配图如图5-5所示。

figure_0079_0114
图5-5 数组元素在内存中的动态分配

<?php

$interests[TRUE] = "movie";

$interests[FALSE] = "computer";

$interests[8.0] = "music";

$interests["9"] = "software";

$interests[] = "shopping";

$interests[9] = "others";

print_r($interests);/*输出:Array ( [1] => movie [0] => computer [8] => music [9] =>others [10] => shopping ) */

?>

(4)不要在 array() 语言结构中使用诸如“red=>"red"”键值对的方式创建数组元素,也不要使用诸如“$colors[red] = "red"”的赋值语句的方式创建数组元素,否则程序的可读性及运行效率将大打折扣,读者可以比较下面程序createArray6.php和createArray7.php。

程序createArray6.php

<?php

define("red","a");

$colors = array(red=>"red","green",3=>"white",5);

print_r($colors);

?>

程序createArray7.php

<?php

$colors = array(red=>"red","green",3=>"white",5);

print_r($colors);

?>

程序createArray6.php和程序createArray7.php的运行结果如图5-6和图5-7所示。

figure_0080_0115
图5-6 数组的键为常量
figure_0080_0116
图5-7 没有定义的常量作为数组的键

PHP预处理器会将程序createArray7.php中诸如“red=>"red"”键值对中的“键”red(不带引号的red)作为常量进行处理,由于程序中没有定义red常量,PHP预处理器会将red常量解释为"red"字符串。使用这样的方式定义数组元素,不仅降低了程序的可读性,同时也降低了程序的运行效率。

5.2.4 数组元素“值”的访问

访问数组元素值的方法和访问变量值的方法相同:通过指定数组名并在方括号内指定“键名”的方式“访问”数组元素的“值”。使用这样的方法访问数组,不仅可以读取某个数组元素的“值”,还可以为数组添加数组元素以及修改数组元素的“值”,并可以像访问“变量”一样访问数组元素的值。例如如下程序visitArray.php,该程序的运行结果如图5-8所示。

<?php

$colors = array("red"=>"red","green"=>"green","white"=>"white","blue"=>"blue");

$colors["black"] = "black"; //为数组添加数组元素:"black"=>"black"

$colors["red"] = "#FF0000"; //修改键为"red"的元素值:"red"=>"#FF0000"

print_r($colors);

echo "<br/>";

if(isset($colors["green"])){//使用isset()函数判断键为"green"的数组元素是否定义

echo "我喜欢绿色。";

}

echo "<br/>";

unset($colors["green"]); //使用unset()函数取消键为"green"的数组元素的定义

if(!isset($colors["green"])){

echo "我又不喜欢绿色了。";

}

echo "<br/>";

echo gettype($colors["blue"]); //使用gettype()函数查看键为"blue"的数组元素的数据类型

echo "<br/>";

var_dump($colors["blue"]); //使用var_dump()函数得到键为"blue"的数组元素的数据类型及值

?>

figure_0081_0117
图5-8 数组元素“值”的访问

PHP提供两种变量赋值方式:传值赋值和传地址赋值,对于数组同样适用。读者可以比较下面的两个程序byValue.php和byReference.php。

程序byValue.php

<?php

$colors1 = array("red"=>"red","green"=>"green","white"=>"white");

$colors2 = $colors1;

$colors2["blue"] = "blue"; //为数组$colors2添加元素:"blue"=>"blue"

$colors2["red"] = "#FF0000"; //修改数组$colors2“键”为"red"的元素值:"red"=>"#FF0000"

print_r($colors1);

echo "<br/>";

print_r($colors2);

?>

程序byReference.php

<?php

$colors1 = array("red"=>"red","green"=>"green","white"=>"white");

$colors2 = &$colors1;

$colors2["blue"] = "blue"; //为数组$colors1和$colors2添加数组元素:"blue"=>"blue"

$colors2["red"] = "#FF0000"; //修改数组$colors1和$colors2的元素值:"red"=>"#FF0000"

print_r($colors1);

echo "<br/>";

print_r($colors2);

?>

程序byValue.php和程序byReference.php的运行结果如图5-9所示和图5-10所示。

figure_0081_0118
图5-9 数组的传值赋值
figure_0081_0119
图5-10 数组的传地址赋值

程序byValue.php运行过程中的内存分配图如图5-11所示。

程序byReference.php运行过程中的内存分配图如图5-12所示。

figure_0082_0120
图5-11 数组元素在内存中的动态分配
figure_0082_0121
图5-12 数组元素在内存中的动态分配

相关教程

共有条评论 网友评论

验证码: 看不清楚?