第3章
PHP数组
3.1 数组的定义
一个变量可以理解为包含单个值的容器,而数组则正好相反,可以包含多个值。数组是数据值的集合,是一个可以存储一组或一系列数值的变量。一个数组可以具有许多个元素。每个元素都有一个值。PHP允许一个数组包括不同数据类型的元素,例如字符串、数字或另一个数组。一个包含其他数组的数组称为多维数组。
存储在数组中的值称为数组元素,数组中的元素是在索引(也称下标)的基础上被引用和操作的。根据索引类型的不同,PHP数组可分为数字索引数组和关联数组。
数字索引数组的索引是从0开始的整数,而关联数组的索引是字符串。实质上,在PHP内部所有的数组都被存储为关联数组,只是数字索引数组将索引特别指定到了数字。
注意:
关联数组与数字索引数组唯一的区别在于索引的类型。
与其他许多语言中的数组不同,PHP不需要在创建数组时指定数组的大小,甚至不需要在使用数组前先行声明。
3.2 数字索引数组
大多数编程语言都支持数字索引数组。数字索引数组是指数组元素的索引为整数的数组,索引从0开始,依次递增。当需要通过相对位置来确定数组元素时,通常使用数字索引数组。数字索引数组也称为枚举数组、标量数组或简单数组,图3-1是一个数字索引数组的示例。
其中数组名为$name,包括数组元素:“张明”、“李四”、“王小五”、“赵勤”和“李小平”。可以通过索引(下标)O来引用“张明”,通过索引1来引用“李四”,通过索引2来引用“王小五”,依此类推。要引用PHP中的元素,需要使用一对中括号([]),例如以下语句可以显示索引2的数组元素值:
echo $name[2];
注意:
PHP的数字索引数组默认以0开始,而不是1,这与C、C++、Java等许多编程语言相同。数组最后一个索引号等于数组中元素个数减1
3.2.1 数字索引数组的初始化
由于PHP中数组没有大小限制,所以在为数组初始化的同时就一并对数组进行了声明。数字索引数组初始化通常有两种方法。其中之一是直接为数组元素赋值。例如要初始化如图3-1所示的数字索引数组,代码如下:
$name[O]= "张明";
$name[1]= "李四";
$name[2]= "王小五";
$name[3]= "赵勤";
Sname[4]= "李小平";
当索引值是递增的,可以不在方括号内指定索引值。默认的索引值从0开始依次增加,即为0、1、2、3、4,如下所示:
$name[]="张明";
$name[]="李四";
$name[]="王小五";
$name[]="赵勤";
Sname[]="李小平";
这种不显式地指定索引值的赋值方法,也称简单赋值方法,在初始化索引值连续递增的数组时非常简便。
对于非连续索引的数组,对其初始化可以直接指定索引值,如下所示:
$userID[23]=”001” ;
$userID[50]=“015” ;
$userID[10]=”784”;
其中数组userID有3个数组元素,其索引值分别为:23、50、10,它们对应的元素值分别为:“001”、“015”、“784”。
如果没有指定索引值的元素与指定索引值的元素混在一起赋值时,没有显式指定索引值的元素的默认索引值将紧跟显式指定索引值的元素中的最高的索引值。例如:
$cities[45]=”南宁”;
$cities[50]=”长春”;
$cities[65]=”北京”;
$cities[]=”哈尔滨”;
其中在数组cities中出现的最高索引值为65,所以值为“哈尔滨”的数据元素的索引值是66。
如果数组不存在,那么为数组元素赋值的同时即可创建该数组,但是检索一个不存在的数组并不会创建该数组。例如:
//数组$person之前没有被定义
echo $person[0];
echo $person;
由于数组$person在使用语句”echo $person[0];”和“echo $person;”进行显示输出之前没有被定义,所以不会有输出,并且数组$person也不会就此被创建。
初始化数组的另一种方法是用array()函数。只需将元素的值作为参数传递给array()函数即可。例如:
$products=array(”橡胶”, ”酒”, ”汽车”, ”化妆品”);
以上代码将创建一个名为$products的数组,其中包含4个数组元素——“橡胶”、“酒”、“汽车”和“化妆品”,默认的索引是0、l、2和3。若希望输出第3个数组元素的值,那么可以使用以下代码:
echo $products[2]; //输出第3个数组元素“汽车”
如果在初始化时不希望使用默认的索引,可以使用“=>”运算符给数组元素指定索引。例如上例中,指定“橡胶”的索引值为5,“酒”的索引值为7,“汽车”的索引值为11,“化妆品”的索引值为15,修改代码如下:
$products=array(5=>”橡胶”,7=>”酒”,11=>”汽车”,15=>”化妆品”);
在以下的示例中,“橡胶”的索引为0,“酒”的索引为7,“汽车”的索引为ll,“化妆品”的索引为12:
$products=array(”橡胶”,7=>”酒”,11=>”汽车”,”化妆品”);
如果要创建一个空数组,只须不传递参数给array()即可,如下所示:
$addresses=array();
如果数组元素是按顺序排列的数字,则在对数组进行初始化时,可以使用range()函数。range()函数具有3个参数,其中第1个参数指定起始值,第2个参数指定终止值,第3个参数可选,用于指定步长。例如:
$values=range(1,20);
该行代码将建立一个数组元素从1到20的数组。例如以下代码将创建一个从1到20之间的奇数组成的数组:
$odds=range(1,20,2);
例如以下代码将创建一个数组元素分别为5、4、3、2、1的数组:
$reverse=range(5,1);
当数组元素是连续的字符时,也可以使用range()函数,例如:
$alphabet=range("a","g");
该行代码创建了一个数组元素从“a”到“g”的数组$alphabet。如果range()函数中的参数指定的是一个字符串,则只有字符串的第一个字母有效,例如以下代码创建的也是一个数组元素从“a”到“g”的数组$alphabet:
$alphabet=range("aaaa","gggg");
注意:
在对数组进行初始化时,如果所需的数据保存在另一个数组中,可以简单的使用运算符“=”,直接对数组元素进行复制。如果数据保存在数据库中,那么还可以从数据库中直接载入数组,完成数组的初始化。
3.2.2 访问数组元素
要访问一个变量,可以直接使用变量的名称,若需访问数组中的一个元素,可以使用数组名和索引的组合。索引在数组名称后面用方括号括起来。例如有以下数组:
$name=array("张三","李四","王小二","李小明");
可以使用$name[0]访问第1个数组元素(“张三”),可以使用$name[1]访问第2个数组元素(“李四”),可以使用$name[2]访问第3个数组元素(“王小二’’),可以使用$name[3]访问第4个数组元素(“李小明”)。例如显示数组$name的第2个元素的值,代码如下:echo $name[1];
还可以使用运算符“=”修改数组元素的内容。例如修改第3个数组元素“王小二”的值为“王亮”,代码如下:
$name[2l=”王亮”;
另外,如果需要新增一个数组元素到数组末尾,可以通过给数组元素赋值的方式直接实现添加。例如为数组$name添加第5个数组元素“张常乐”,代码如下:
Sname[4]=”张常乐”;
而要显示数组$name中全部元素的内容的话,所用代码如下:
echo “$name[0] $name $name[2] $name[3] Sname[4]”;
需要注意的是,当数组名或变量名被嵌入到双引号中时,如果不能被正确解析,可以尝试将其放到双引号之外。例如上面代码也可改写为:
echo $name[O].$name[1].$name[2].$name[3].$name[4];
3.2.3 利用循环访问数组元素
对于数字索引数组,通常会使用有序的数字作为索引,所以可以简单地使用for循环就可以很容易地访问数组中的元素。例如:
$name=array("张三","李四","王小二","李小明");
for( $i=0;$i<3;$i++)
echo "$name[$i]"."
";
?>
该代码将循环输出数组$name中的每一个元素值。也可以使用foreach语句,循环输出数组中的元素,代码如下所示(代码2.php):
$name=array("张三","李四","王小二","李小明");
foreach ($name as $temp)
echo $temp;
?>
3.3 关联数组
数字索引数组在各种编程语言中非常常见。但对于关联数组,只有使用过PHP或Perl的程序员才不会感到陌生。
关联数组允许数组中每个元素除了可以使用数字索引外,还可以使用字符串作为素引。如果需要通过名称访问数组中的元素,那么使用字符串作为数组的索引将是非常方便的。使用字符串作为索引的数组即称为关联数组。图3-2是一个关联数组的示例。
其中数组名为$name,包括数组元素:“张明”、“李四”、“王小五”、“赵勤”和“李小平”,其索引值分别为“userl”、“user2”、“user3”、“user4”和“user5”。例如可以通过以下的语句显示索引为user2的数组元素的值:
echo $name[user2];
注意
使用数字索引数组和关联数组的区别之一在与关联数组以字符串为索引,不能通过简单的加1或减1直接计算出数组中的下一个或前一个的有效索引值。
3.3.1 关联数组的初始化
关联数组的初始化可以采用与数字索引数组类似的方法,通过直接为数组元素赋值来完成。例如要初始化如图3—2所示的关联数组,代码如下:
$name[userl]= "张明";
$name[user2]= "李四";
$name[user3]= "王小五";
$name[user4]= "赵勤";
$name[user5]= "李小平";
也可以使用aray()函数来完成初始化,其中索引值与数组元素值之间需要使用运算符“=>”。例如下例为数组$score初始化:
$score=array("张明"=>80,
"李亮"=>90,
"王平"=>67,
"张晓红"=>77,
"赵高"=>87);
该语句执行效果等同于:
$score["张明"]=80;
$score["李亮"]=90;
$score["王平"]=67;
$score["张晓红"]=77;
$score["赵高"]=87;
3.3.2 访问数组元素
同样,可以使用数组名和索引值的组合来访问关联数组中的元素。例如下例关联数组:$score=array("张明"=>80,"李亮"=>90,"王平"=>67,"张晓红"=>77,"赵高"=>87);
可以使用$score["张明"]访问第1个数组元素(元素值为“80”),可以使用$score["李亮"]访问第2个数组元素(元素值为“90”),可以使用$score["王平"]访问第3个数组元素(元素值为“67”),可以使用$score["张晓红"]访问第4个数组元素(元素值为“77”),可以使用$score["赵高"]访问第5个数组元素(元素值为“87”)。例如显示索引为“李亮”的数组元素的值,代码如下所示:
echo $score["李亮"];
可以使用运算符“=”修改数组元素的内容。例如修改索引为“王平”的数组元素的值,由“67”改为“87”,代码如下:
$score["王平"]=87;
如果需要将一个数组元素新增到数组末尾,可以通过给数组元素赋值的方式直接实现添加。例如为数组$score添加索引为“杨乐”的数组元素,且数组元素值为99,代码如下:$score["杨乐"]=99;
显示数组$score中全部元素的内容,代码如下:
echo "$score["张明"] $score["李亮"] $score["王平"] $score["张晓红"] $score["赵高"] $score["杨乐"]=99";
3.3.3 使用循环访问数组
由于关联数组的索引不是数字,所以无法像数字索引数组一样使用for循环对数组进行操作,但仍可使用foreach循环。例如:
$name=array("张三"=>45,"李四"=>56,"王小二"=>67,"李小明"=>56);
foreach ($name as $temp)
echo $temp."
";
?>
其中foreach循环每循环一次,将数组$name中的数组元素值提取出一个赋予变量$temp,直至数组结束。
也可以使用以下方式,循环提取出数组元素的索引和元素值:
$name=array("张三"=>45,"李四"=>56,"王小二"=>67,"李小明"=>56);
foreach ($name as $key=>$value)
echo $key."的成绩为:".$value."
";
?>
其中foreach循环每循环一次,将提取出数组$name中的一个数组元素,且将该元素的索引
值赋予变量$key,将元素值赋予变量$value,直至数组结束。
3.4 与数组相关的运算
与数组相关的运算包括联合、等于、不等于、恒等、不恒等,相应运算符及示例如表3—1 所示。
例如下例中,对数组$a和数组$b进行联合运算,建立新数组$c,并显示输出数组$c,代码如下:
$a=array("张三"=>45,"李四"=>56,"王小二"=>67,"李小明"=>56);
$b=array("张全"=>65,"王刚"=>46,"周大生"=>69,"韩力"=>96);
$c=$a+$b;
foreach ($c as $key=>$value)
echo $key." 的成绩为:".$value."
";
?>
但当数组中存在重复的索引值时,重复的数组元素将不会被添加,即重复的数组元素不会因联合运算而被覆盖。例如:
$a=array("张三"=>45,"李四"=>56,"王小二"=>67,"李小明"=>56);
$b=array("张全"=>65,"王刚"=>46,"周大生"=>69,"李小明"=>96);
$c=$a+$b;
foreach ($c as $key=>$value)
echo $key." 的成绩为:".$value."
";
?>
其中,数组$a与数组$b都有索引值为“李小明”的数组元素,执行联合运算后,数组$b 中的元素“李小明”不会被添加。
3.5 多维数组
不仅仅在一个索引值和元素值的简单列表中可以保存数组,而且数组中的每个元素也可以保存一个数组。如果数组的元素仍为数组,就构成了多维数组。一个包含数组的数组,称为二维数组,如果二维数组元素仍包含数组,就构成了一个三维数组,依此类推,可以创建四维数组、五维数组等多维数组。但最常见的是二维数组。
可以把二维数组想像成一个矩阵,或者是一个具有宽度和高度或者行和列的表格。例如
图3-3是一个学生成绩单,可以用一个二维数组表示。
图3-3 二维数组示例
其中每一行表示一个学生记录,每一列分别代表学生的“姓名”、“学号”、“性别”和“成绩”。在PHP中可以使用如下代码建立图3-3所示的二维数组:
可以看到创建的二维数组名为$info,其中包括3个子数组。
访问数组只需使用数组的名称和索引值即可。其中一维数组的索引值是一维的,而二维数组的索引值则具有行和列两个维度值(通常最上边的是第0行,最左边的是第0列)。必须使用二维索引值才能正确定位到二维数组元素。例如以下代码可以按照从左至右、从上至下的顺序显示图3-3所示的二维数组元素:
$info=array( array("张三","0001","男","89"),
array("李四","0056","男","92"),
array("王红","0077","女","95"));
echo "
echo
"|".$info[0][0]."|".$info[0][1]."|".$info[0][2]."|".$info[0][3]." |
";
echo
"|".$info[1][0]."|".$info[1][1]."|".$info[1][2]."|".$info[1][3]." |
";;
echo
"|".$info[2][0]."|".$info[2][1]."|".$info[2][2]."|".$info[2][3]." |
";;
?>
该代码的执行结果如图3-4所示:
图3-4 访问二维数组元素
此外也可以使用双层for循环来访问二维数组,例如:
$info=array( array("张三","0001","男","89"),
array("李四","0056","男","92"),
array("王红","0077","女","95"));
echo "
for ($row=0;$row<3;$row++)
{
for ($column=0;$column<4;$column++)
{
echo "|".$info[$row][$column];
}
echo "|
";
}
?>
该代码的执行结果如图3-5所示。
图3-5 使用for循环访问二维数组
以上示例中建立或访问的都是二维数字索引数组,为了便于记忆也可以建立二维关联数组。例如按图3-3所示的逻辑关系建立二维关联数组如下:
$info=array(
array("姓名"=>"张三","学号"=>"0001","性别"=>"男","成绩"=>"89"), array("姓名"=>"李四","学号"=>"0056","性别"=>"男","成绩"=>"92"),
array("姓名"=>"王红","学号"=>"0077","性别"=>"女","成绩"=>"95")); ?>
对于二维关联数组不能简单地使用两层for循环来完成遍历,必须在每层循环中正确指定索引名称。例如下列代码循环显示二维关联数组中的元素:
$info=array( array("姓名"=>"张三","学号"=>"0001","性别"=>"男","成绩"=>"89"),
array("姓名"=>"李四","学号"=>"0056","性别"=>"男","成绩"=>"92"),
array("姓名"=>"王红","学号"=>"0077","性别"=>"女","成绩"=>"95"));
echo "
for ($row=0;$row<3;$row++)
{
echo "|".$info[$row]["姓名"]."|".$info[$row]["学号
"]."|".$info[$row]["性别"]."|".$info[$row]["成绩"]."|
";
}
?>
三维数组具有高、宽、深三个维度的概念,是一个包含了数组的数组的数组,形式上类似于组织在一起的多个二维表。图3-6所示是计算机系、中文系和数学系的学生成绩单,具有三维属性,可以按三维数组进行组织。
图3-6三维数组示例
可以看到,所建立的三维数组采用了默认的数字索引方式,所以可以通过嵌套for循环
来显示该三维数组的内容,代码如下所示:
$grade=array( array( array("张三","0301","男","89"),
array("李四","0356","男","92"),
array("王红","03337","女","95")
),
array( array("王国","0101","男","79"),
array("张三","0256","男","62"),
array("张三","0277","女","95")
),
array( array("张艺","0004","男","89"),
array("周华","0026","男","32"),
array("杨红","0057","女","65")
)
);
echo "
for($layer=0;$layer<3;$layer++)
{
echo "输出第 $layer 维:
";
for ($row=0;$row<3;$row++)
{
for ($column=0;$column<4;$column++)
{
echo "|".$grade[$layer][$row][$column];
}
echo "|
";
}
}
该代码执行结果如图3-7所示。
图3-7 使用for循环输出三维数组
3.6 数组的排序
对数据进行排序是各类应用中经常遇到的操作。常用的排序算法包括插入排序、冒泡排序、堆排序、希尔排序和快速排序。PHP为了简化对数组的排序,提供了大量能以多种不同方式对数组进行排序的函数。
注意
PHP默认的排序函数都会按英语的习惯规则进行排序。如果需要按另一个种语言的约定进行
排序,比如法语或德育,需要修改系统默认值。可以使用setlocale()函数对本地语言环境进行设置。
3.6.1 函数sort():按数字和字母顺序排序
sort()函数是PHP所提供的排序函数中最简单的一个函数。sort()函数会按数字和字母的顺序(先数字后字母)重新排列数组元素。sort()函数的格式如下:
boolean sort (array target_array [,int sort_flags])
其中“target_array”是需要进行排序的数组名,各元素会按由低到高的顺序排列。由于sort()函数只是“就地”对数组进行排序(其返回值不是排序后的数组),因此排序后会对数组赋予新的索引值,原有的索引值会被删除。参数sort_flags是可选项,用于设置排序的行为,可用的选项如下:
?SORRT_NUMBERIC:元素被作为数字进行排序,主要针对整数和浮点数。
?SORT_REGULAR:不改变数据类型,按照相应的ASCII值对元素进行排序。例如
大写字母“A”按ASCII值会排在小写“a”的前面。
?SORT_STRING:元素被作为字符串进行比较并排序。
?SORT_LOCALE_STRING:根据当前的区域环境设置,按字符串进行比较并排序。例如以下示例将学生的考试成绩保存到数字索引数组$grade中,使用sort()函数按由低到高对考试成绩进行排序,代码如下:
$grade=array(34,59,77,48,99,87,76,12);
echo "排序前:
";
print_r($grade);
echo "
排序后:
";
sort($grade);
print_r($grade);
?>
该代码执行结果如图3-8所示。可以看到,排序后索引发生的化:索引0对应元素值12,索引1对应元素34,索引2对应元素48,索引3对应元素59,索引4对应元素值76,索引5对应元素值77,索引6对应元素值87,索引7对应元素值99。
图3-8 使用sort()函数对数字索引数组进行排序
对于关联数组,如果使用sort()函数进行排序,其原有索引关系将被破坏,如下所示:
$grade=array("张三"=>45,"李四"=>56,"王小二"=>67,"李小明"=>56);
echo "排序前:
";
print_r($grade);
echo "
排序后:
";
sort($grade);
print_r($grade);
?>
该代码执行结果如图3-9所示。可以看到原来的索引关系排序后已经被数字索引所取代。如果希望保留原来的索引关系,可以使用asort()函数。
图3-9使用sort()函数对关联数组进行排序
3.6.2 函数asort():对关联数组排序
asort()函数与sort()函数基本相同,会按升序对数组进行排序,但asort()函数会保留原来的索引关系。asort()函数格式如下所示:
void assort(array tarqet_array [,integer sort_flags]);
其中“target_array”是需要进行排序的数组名,参数“sort_flags”可选,其选项与sort()函数相同。例如以下代码对学生成绩按由低到高的顺序进行排序,并分别对sort()和asort()的排序结果进行了对比。
$grade=array("张三"=>45,"李四"=>56,"王小二"=>67,"李小明"=>58);
echo "排序前:
";
print_r($grade);
echo "
$grade_cp=$grade;
echo "
使用sort( )函数排序后:
";
sort($grade);
print_r($grade);
echo "
echo "
使用asort( )函数排序后:
";
asort($grade_cp);
print_r($grade_cp);
?>
该代码执行结果如图3-10所示。可以看到使用asort()函数不会改变原来数组的索引关系,对于关联数组,该特点尤其重要。
图3-10 使用sort函数和asort函数的对比
3.6.3 函数ksort():按索引值进行排序
与asort()函数不同,ksort()函数会按索引值进行排序,而不是像asort()或sort()函数一样按元素值进行排序。ksort()函数的格式如下所示:
integer ksort(array target_array,[,sort_flaq]);
其中“target_array”是需要进行排序的数组名,参数“sort_flags”可选,其选项与sort()函数相同。
例如对数组$grade使用ksort()函数按索引值(“用户1”~“用户N”)进行排序,代码如下所示:
$grade=array("用户5"=>45,"用户6"=>56,"用户2"=>67,"用户9"=>58);
echo "排序前:
";
print_r($grade);
echo "
echo "
使用ksort( )函数排序后:
";
ksort($grade);
print_r($grade);
?>
该代码执行结果如图3-11所示。可以看到使用ksort()函数排序后,数组按索引值从小到大顺序重新进行了排序。
图3-11使用ksort()函数对数组进行排序
3.6.4 函数usort():按用户自定义方法排序
usort()函数与其他排序函数一样,接受数组作为排序对象。但usort()函数允许用户自定义排序方法。例如以下的示例将按数组中字符串的长度进行排序,其中比较字符串长度的函数compare_length()由用户自行定义。代码如下:
function compare_length($a,$b)
{
$a =strlen($a);
$b =strlen($b);
if ($a ==$b) return 0;
if ($a <$b) return -1 ; else return 1;
}
$address=array("张三"=>"北京市海淀区中关村南大街5号",
"李四"=>"北京市海淀区清河大楼",
"王亮"=>"哈尔滨市道里区",
"赵刚"=>"广西南宁市");
usort($address,compare_length);
print_r($address);
?>
该代码执行结果如图3-12所示。可以看到,数组中的元素按字符串长度由小到大重新进行了排序。其中compare_length()函数用于比较两个字符串的长度:当两个字符串长度相同时,返回值为0;当第一个字符串比第二个字符串长时,返回值为1;当第一个字符串比第二个字符串短时,返回值为l。
图3-12 使用usort函数对数组进行排序
对于多维数组,由于具有多个维度,使用usort()函数可以按指定的维度进行排序。例如在下例的二维数组中保存了学生的姓名、学号、性别和成绩。定义compare()函数,指定按学生的成绩排序。代码如下:
$info=array( array("张三","0001","男","89"),
array("李四","0056","男","92"),
array("王红","0077","女","65"));
function compare($a,$b)
{
if ($a[3]==$b[3] )
return 0 ;
elseif ($a[3]<$b[3])
return -1;
else
return 1;
}
usort ($info,compare);
print_r($info);
?>
该代码执行结果如图3-13所示。可以看到,数组元素按成绩由低至高进行了排序。
图3-13使用usort()函数对二维数组进行排序
3.6.5 函数array_multisort()
array_multisort()函数可以一次对多个数组进行排序,还可以按多种方式对多维数组进行排序。array_multisort()函数的格式如下所示:
boolean array_multisort(array target_array[,mixed arg [,mixed arg2…]])
其中参数target_array指定待排序的数组或维度,参数“mixed arg”可选,用于指定排序的类型和顺序,可选的参数如下。
·SORT_ASC:设定按升序排列。
·SORT_DESC:设定按降序排列。
·SORT_REGULAR:常规方法比较数组元素。
·SORT_NUMERIC:按数值比较数组元素
·SORT_STRING:按字符串比较数组元素
如果排序成功,该函数返回true,否则返回false。例如:
$ar1 = array(10, 100, 100, 44);
$ar2 = array(1, 3, 9, 1);
echo "排序前两数组分别为:
";
print_r($ar1);
echo "
";
print_r($ar2);
echo "
echo "排序后两数组分别为:
";
array_multisort($ar1, $ar2);
print_r($ar1);
echo "
";
print_r($ar2);
?>
该代码执行结果如图3-14所示。其中数组$arl及数组$ar2均按升序进行输出。
例如以下对一个包含学生成绩的二维数组进行排序。要求首先按“张三”的各门成绩的升序排列,当成绩相同时,按“王五”各门成绩的降序排列。代码如下:
$grade["张三"]["语文"]="81";
$grade["张三"]["数学"]="89";
$grade["张三"]["英语"]="89";
$grade["王五"]["语文"]="95";
$grade["王五"]["数学"]="36";
$grade["王五"]["英语"]="90";
echo "排序前二维数组:
";
print_r($grade);
echo "
echo "排序后二维数组为:
";
array_multisort($grade["张三"],SORT_NUMERIC,SORT_ASC,$grade["王五"],SORT_NUMERIC,SORT_DESC);
print_r($grade);
?>
该代码执行结果如图3-15所示。可以看到,“张三”的数学和英语成绩相同;在此情况下,参照“王五”的数学和英语成绩的降序排列。由于王五的英语成绩高于数学成绩,因此数组$grade最终按“语文”——“英语”——“数学”顺序输出。
图3-14使用array—multisort()函数对多个数组进行排序
图3-15使用array—multisort() 函数对二维数组进行排序
3.6.6 函数nasrot(): 自然排序
natsort()函数实现了人们通常对字母、数字及字符串进行排序的方法,通常被称为“自然排序”。natsort()函数会保留原有的索引关系。
例如对下列各项进行排序:imgl2.jpg、img10.jpg、img2.jpg、img2.jpg。如果使用函数sort(),将无法得到通常的排序结果。函数natsort()与函数sort()对比输出结果如下所示:
$array1 = $array2 = array("img12.jpg", "img10.jpg", "img2.jpg", "img1.jpg");
echo "排序前数组序列为:
";
print_r($array1);
echo "
echo "使用sort( )函数排序后的数组序列为:
";
sort($array1);
print_r($array1);
echo "
echo "使用natsort( )函数排序后的数组序列为:
";
natsort($array2);
print_r($array2);
?>
该代码执行结果如图3-16所示。
图3-16 使用natsort函数对数组进行排序
3.6.7 函数natcasesrot():自然排序(不区分大小写)
函数natcasesort()与函数natcasesort()功能相同,只是该函数对大小写不敏感。例如对下列各项进行排序:Imgl2_jpg、imgl0.JPg、img2.JPG、IMG2.jpg。如果使用natsort()函数将无法得到通常的排列结果,而使用natcasesort()函数忽略大小写之后再进行排序,会得到所希望的结果。示例代码如下:
$array1 = $array2 = array("Img12.jpg", "img10.Jpg", "IMG2.jpg",
"img1.JPG");
echo "排序前数组序列为:
";
print_r($array1);
echo "
echo "使用natsort( )函数排序后的数组序列为:
";
natsort($array1);
print_r($array1);
echo "
echo "使用natcasesort( )函数排序后的数组序列为:
";
natcasesort($array2);
print_r($array2);
?>
该代码执行结果如图3-17所示。
图3-17使用natcasesort()函数对数组进行排序
3.7 数组的反向排序
函数sort ()、asort ()和ksort()都使数组按升序排序,其实它们都分别对应一个带字母“r”的反向排序函数,可以将数组按降序排序。
反向排序函数与排序函数的用法相同。函数rsort ()可以将一个一维数字索引数组按降序排列。函数arsort()可以将一个一维关联数组按元素值的降序排列。而函数krsort ()将根据数组元素的索引值按降序进行排序。
由于用法和函数sort ()、asort ()和ksort()一致,只是按降序排序,故这里不再赘述。
3.8 对数组进行重新排序
在PHP中提供了一些能够对数组进行另类排序的函数。例如,函数shuffle()可以将数组元素打乱,进行随机排列;函数array_reverse()能够将数组元素进行逆转;函数array_flip()会将数组中的索引及数组元素值进行倒换。
3.8.1 函数shuffle()
shuffle()函数用于对数组进行随机排列,其功能与array_rand()函数相同。shuffle()函数的格式如下:
boo1ean shyuffle (array target_array)
其中参数“target_array”是需要随机排列的数组。例如以下代码用于对数组$numbers 进行随机排序。
$grade=array(0,1,2,3,4,5,6,7,8,9);
echo "随机排序前:
";
print_r($grade);
echo "
echo "
第一次随机排序后:
";
shuffle($grade);
print_r($grade);
echo "
echo "
第二次随机排序后:
";
shuffle($grade);
print_r($grade)
?>
该代码执行结果如图3-18所示。可以看到,每一次随机排列后,数组中的数字序列均不相同。
图3-18使用shuffle()函数示例
例如在以下代码中,数组$pictures中保存了4张图片文件的文件名:1.jpg、2.jpg、3.jpg和4.jpg。通过使用shuffle()函数对数组$pictures进行随机排序,可以看到每次的输出结果均不相同。
$pictures = array("1.jpg","2.jpg","3.jpg","4.jpg");
?>
第三讲数组 一、什么是数组 数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体。数组的每个实体都包含两项:键和值。 二、声明数据 在PHP中声明数组的方式主要有两种: 一是应用array()函数声明数组, 一是直接为数组元素赋值。 <1> array()函数用来新建一个数组。它接受一定数量用逗号分隔的key => value参数对。 array( [key=>] value, ... ) // key可以是数字或者字符串// value可以是任何值 如, "编","2"=>"程","3"=>"词","4"=>"典"); ?>
<2>直接为数组元素赋值。 如果在创建数组时不知所创建数组的大小,或在实际编写程序时数组的大小可能发生变化,采用这种数组创建的方法较好。如, 三、数组的类型 PHP支持两种数组:索引数组(indexed array)和联合数组(associative array),前者使用数字作为键,后者使用字符串作为键。 四、输出数组 1.在PHP中对数组元素输出,可以通过echo语句来实现,但这只能对数组中某一元素进行输出;要将数组结构输出则要使用print_r()函数,
其语法:print_r(mixed expression),参数expression为普通的整型、字符型或实型。变量则输出该变量本身,如果该参数为数组,则按一定键值和元素的顺序显示出该数组中的所有元素。 2.用foreach 循环显示数组元素: "; echo "
"; } foreach($phpjc as $key=>$value) { echo $key.": ".$value;
PHP数组实验报告 班级:10网工三班学生姓名:谢昊天学号:1215134046 实验目的和要求: 掌握PHP的数组声明; 掌握PHP的数组定义; 掌握PHP数组的遍历和排序; 熟练运用数组完成相关的任务。 实验内容: 自己构造一个名字为students的二维数组,每个学号代表一名学生,该学生的信息由“姓名”、“性别”、“成绩”组成,数组中的元素至少具备5条。 然后按照学生的成绩高低对该二维数组进行排序,并在网页中显示排序前后的students数组。 实验步骤与调试过程: 1、启动wamp服务器; 2、注册并打开editplus.exe文件在打开弹出对话窗口选择给定的php程序,程序一定要保存C:\wamp\www 目录下; 3、在editplus中对程序进行编辑添加代码实现功能; 4、编写一个二维数组,然后进行添加数组元素; 5、编写一个函数function array_rsort ($arr,$keys, $type='desc') { // $arr 数组,$keys 所需要进行排序的键值,$type顺序; 6、定义一个变量数组$keysvalue = $new_array = array(); 7、使用foreach循环,把二维数组的第一层数组进行赋值给$keysvalue = $new_array; 8、用if语句来判断排列数组类型是升序还是降序; 9、使数组执行第一个元素reset($keysvalue); 10、再用foreach编译$keysvalue数组,并把数组的值赋给$new_array数组,返回$new_array数组; 11、调用函数$stu = array_rsort($student,'grade');并赋值给变量$stu; 12、$students["000001"]=array("学号"=>"000001","姓名"=>"张三","性别"=>"女","成绩"=>60); $students["000002"]=array("学号"=>"000002","姓名"=>"张四","性别"=>"女","成绩"=>90);
什么是 PHP? ? PHP 指 PHP:超文本预处理器(译者注:PHP: Hypertext Preprocessor,递归命名) PHP 是一种服务器端的脚本语言,类似 ASP PHP 脚本在服务器上执行 PHP 支持很多数据库 (MySQL、 Informix、 Oracle、 Sybase、 Solid、 PostgreSQL、 Generic ODBC 等等) PHP 是一个开源的软件(open source software,OSS) PHP 可免费下载使用 什么是 MySQL? ? MySQL 是一种数据库服务器 MySQL 支持标准的 SQL MySQL 可在许多平台上编译 MySQL 可免费下载使用 为什么要使用 PHP PHP PHP PHP PHP? ? 可在不同的平台上运行(Windows、Linux、Unix) 与目前几乎所有的正在被使用的服务器相兼容(Apache、IIS 等) 可从官方的 PHP 资源免费下载:https://www.wendangku.net/doc/c918971924.html, 易于学习,并可高效地运行在服务器端
从何处开始? 从何处开始? 在 Windows 或者 Linux 机器上安装 Apache 服务器 在 Windows 或者 Linux 机器上安装 PHP 在 Windows 或者 Linux 机器上安装 MySQL 什么是 PHP PHP PHP PHP 文件? 文件? 文件可包含文本、HTML 标签以及脚本 文件向浏览器返回纯粹的 HTML 文件的文件后缀是 ".php"、".php3" 或 ".phtml"
下面的链接提供了来自 https://www.wendangku.net/doc/c918971924.html, 的优秀教程,您可以从中学习到如何安装 PHP5: https://www.wendangku.net/doc/c918971924.html,/manual/en/install.php 下载 PHP 从此处下载免费的 PHP:https://www.wendangku.net/doc/c918971924.html,/downloads.php
下载 MySQL Database 从此处下载免费的 MySQL:https://www.wendangku.net/doc/c918971924.html,/downloads/index.html 下载 Apache Server 从此处下载免费的 Apache:https://www.wendangku.net/doc/c918971924.html,/download.cgi 文件的输出 您无法在浏览器中通过查看源文档的方式来查看 PHP 的源代码 - 您只能看到 PHP 文件的输出,即纯粹 的 HTML。这是因为在结果返回浏览器之前,脚本就已经在服务器执行了。 。这是因为在结果返回浏览器之前,脚本就已经在服务器执行了。
基本的 PHP 语法
PHP 的脚本块以 结束。您可以把 PHP 的脚本块放置在文档中的任何位置。 当然,在支持简写的服务器上,您可以使用 和 ?> 来开始和结束脚本块。 不过,为了达到最好的兼容性,我们推荐您使用标准形式 ( PHP 文件通常会包含 HTML 标签,就像一个 HTML 文件,以及一些 PHP 脚本代码。 在下面,我们提供了一段简单的 PHP 脚本,它可以向浏览器输出文本 "Hello World":
'windows','server'=>'apache','language'=>'PHP'); // foreach ($arr as $key => $value) { // echo $key.":".$value."
"; //循环输出多维数组 // $arr=array( // '公关部'=>array( // array('包子','经理','1500'), // array('佳佳','职员','0') // ), // '广告部'=>array( // array('包子','经理','1500'), // array('佳佳','职员','0') // ), // '设计部'=>array( // array('包子','经理','1500'), // array('佳佳','职员','0') // ) // ); // foreach ($arr as $key => $value) { // echo "
姓名 | 职务 | 工资 |
".$value." | "; // } // echo "||
上篇文章说了array_diff,这次是它的升级版本,php数组差异性比较array_diff_assoc 函数,用来比较不同数组中的key 和value的 差异并按照索引数组输出。 使用语法跟array_diff一样 $newarray = array_diff_assoc($array1,$array2.....); 要注意的也一样:array_diff_assoc 不能递归对比,只能是一维数组,如果数组嵌套数组,则将后面的数组按"数组"比较,就算不同 的数组也会相同。 不一样的而是,这次的比较多了key值,即索引值,如果索引不同,也要返回到数组中。 举例: 1.有索引的比较 <?php $array = array("key_name"=>"array","key_function"=>"array_diff_assoc"); $array1 = array("site"=>"forasp","name"=>"网站制作学习网","key_function"=>"array_diff_assoc"); $forasp = array_diff_assoc($array,$array1); print_r($forasp); ?> 结果: Array ( [key_name] => array //也就是这个key-value 值没有在后面的数组中出现,是个不同值。 ) 2.如果是无索引的数组呢 <?php $array = array("forasp","array","array_diff_assoc"); $array1 = array("forasp","网站制作学习网","array_diff_assoc"); $forasp = array_diff_assoc($array,$array1); print_r($forasp); ?> 结果跟上面的一样,不同的是这个key变成了索引 Array ( [1] => array //也就是这个key-value 值没有在后面的数组中出现,是个不同值。 ) 也就是说在没有索引的数组中,比较的是索引id 和value。 array_diff_assoc就介绍完了,它就是array_diff的升级版本吧。 更多信息请查看IT技术专栏
(1)数组的概念与分类 定义:数组是php中最重要的数据类型之一,在php中的应用非常的广泛。因为php 是弱类型的编程语言,所以php中的数组变量可以存储任意多个、任意类型的数据。使用数组的目的,就是将多个相互关联的数据组织到一起,形成一个集合,作为一个单元使用达到批量数据处理的目的。 Php中数组的根据索引来分为关联数组和数字索引数组。如果一个数组中的索引全部为数字,那么数组就称为数字索引数组。如果数组中有一个索引为字符串那么数组就称为关联数组。 (2)Php中数组的定义 A.定义方式 (1)使用array()声明 可以用array()语言结构来新建一个数组。它接受任意数量用逗号分隔的键(key) => 值(value) 对,例如: "bar", 12 => true); echo $arr["foo"]; // bar echo $arr[12]; // 1 ?> 其中键可以为整型或字符串型,值可以为任何类型。如果对给出的值 没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加 一。如果指定的键名已经有了值,则该值会被覆盖。 (2)使用[]声明 我们可以使用[]来定义和修改数组元素 B.对数组元素的操作 (1)追加数组元素(就是在数组的末尾添加数组元素) $数组名[键名]=值; (2)更新数组元素 $数组名[键名]=新值; (3)删除数组元素 Unset($数组名[键名]) (4)在数组头部添加数组元素 Array_unshift($arr, $value),在数组的开头插入一个元素。 (5)在数组的尾部添加数组元素 Array_push($arr, $value1, $value2..),将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素个数。
Current(数组的名称);得到目前位置指针内容 $arr=array(“one”,”two”,”three”,1,35,5,6,”four”) $a=$current($arr); $b=$current($arr); V ar_dump($a); //返回one V ar_dump($b); //返回还是one key(数组的名称);读取目标指针所指向的数组的索引的值 $arr=array(“one”,”two”,”three”,1,35,5,6,”four”) $a=$key($arr); V ar_dump($a); //返回0即下标【0】 Next(数组名称);往下移动一个 $arr=array(“one”,”two”,”three”,1,35,5,6,”four”) Echo ($a); //返回one Next($arr); Echo ($a); //返回two prev(数组名称); 往前移动一个 … end(数组名称);移动到结尾 …….. reset(数组名称);重新回到第一个位置 …… Count(数组名称),sizeof();求数组长度 Array_change_key_case(目标数组,形态常数(CASE_UPPER CASE_LOWER));将字符串索引中的所有英文字母转化为大写或者小写 $arr=array(“one”=>”one”,”WWW”=>”two”,”three”,1,35,5,6,”four”) $newarr=Array_change_key_case($arr,CASE_UPPER); Print_r($newarr); Array_chunk(目标数组,分解的索引个数,【布尔值】);将目标数组的资料内容,指定的索引个数,分解成多个小数组,布尔值表示是否保持以前数组的索引 $arr=array(“one”=>”one”,”WWW”=>”two”,”three”,1,35,5,6,”four”) $newarr=Array_chunk($arr,2); //分解为了二维数组,每个数组里有两个元 Print_r($newarr);
php操作mysql执行数据库查询的一些常用操作罗列 php操作mysql步骤: 1.$connect=mysql_connect('localhost','root','123456') or die('数据库连接失 败。'mysql_error());链接mysql。 2.mysql_select_db('database',$connect)选择链接的数据库。 3.mysql_query('Set names gb2312'); $sql = "select * from blog_article";准备要查询的数据。 4.$datas = mysql_query($sql);执行sql查询。 5.$data = mysql_fetch_assoc($datas)得到查询到的缓存在内存中的一条数据。 6.print_r($data); 相同点:三个函数都是返回数据库中查询到的一行数据(说的再清楚点就是一条数据)。 不同点:mysql_fetch_assoc()用的是数据库中相应的字段名作为的key值(也就是数组下标 )如:filed['id']=1; mysql_fetch_row()用的是自动生成的数字(从0开始依次生成)作为的key值(也就是数组 下标)如:filed[0]=1; mysql_fetch_array()用的是自动生成的数字(从0开始依次生成)作为的key 值(也就是数 组下标),而且它还同时生成数据库中相应的字段名作为的key值(也就是数组下标)如: filed[0]=1,filed['id']=1;也就是说,mysql_fetch_array()将 mysql_fetch_assoc()和 mysql_fetch_row()查询到的结果合为了一体了。 mysql_fetch_object()与mysql_fetch_assoc()差不多。只是 mysql_fetch_assoc()返回的是 数组。mysql_fetch_object()返回的是object对象。
php array数组 有三种数组类型:数值数组带有数字 ID 键的数组关联数组数组中的每个 ID 键关联一个值多维数组包含一个或多个数组的数组 数值数组 数值数组存储的每个元素都带有一个数字 ID 键。 可以使用不同的方法来创建数值数组: 例子 1 在这个例子中,会自动分配 ID 键:$names = array("Peter","Quagmire","Joe"); 例子 2 在这个例子中,我们人工分配的 ID 键:$names[0] = "Peter";$names[1] = "Quagmire";$names[2] = "Joe"; 可以在脚本中使用这些 ID 键:
以上代码的输出:Quagmire and Joe are Peter's neighbors 关联数组 关联数组,它的每个 ID 键都关联一个值。 在存储有关具体命名的值的数据时,使用数值数组不是最好的做法。 通过关联数组,我们可以把值作为键,并向它们赋值。 例子 1 在本例中,我们使用一个数组把年龄分配给不同的人:$ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34); 例子 2 本例与例子 1 相同,不过展示了另一种创建数组的方法:$ages['Peter'] = "32";$ages['Quagmire'] = "30";$ages['Joe'] = "34"; 可以在脚本中使用 ID 键:
很全的php数组操作方法 一、数组操作的基本函数 数组的键名和值 array_values($arr);获得数组的值 array_keys($arr);获得数组的键名 array_flip($arr);数组中的值与键名互换(如果有重复前面的会被后面的覆盖) in_array("apple",$arr);在数组中检索apple array_search("apple",$arr);在数组中检索apple,如果存在返回键名 array_key_exists("apple",$arr);检索给定的键名是否存在数组中 isset($arr[apple]):检索给定的键名是否存在数组中 数组的内部指针 current($arr);返回数组中的当前单元 pos($arr);返回数组中的当前单元 key($arr);返回数组中当前单元的键名 prev($arr);将数组中的内部指针倒回一位 next($arr);将数组中的内部指针向前移动一位 end($arr);将数组中的内部指针指向最后一个单元 reset($arr;将数组中的内部指针指向第一个单元 each($arr);将返回数组当前元素的一个键名/值的构造数组,并使数组指针向前移动一位list($key,$value)=each($arr);获得数组当前元素的键名和值 数组和变量之间的转换 extract($arr);用于把数组中的元素转换成变量导入到当前文件中,键名当作变量名,值作为变量值 注:(第二个参数很重要,可以看手册使用)使用方法echo$a; compact(var1,var2,var3);用给定的变量名创建一个数组 二、数组的分段和填充 数组的分段 array_slice($arr,0,3);可以将数组中的一段取出,此函数忽略键名 array_splice($arr,0,3,array("black","maroon"));可以将数组中的一段取出,与上个函数不同在于返回的序列从原数组中删除
PHP数组基本知识及常用函数 1)数组:就是一个有序的数据的集合; 使用一个名字可以存储多个数据; 数组使用的原因: 主要是如果存储儿百个数据时,不可能定义儿百个变量來操作; 2)数据的定义格式: 变量名=array (数据1,数据2,数据3、、、、); eg: $arr=array();空数组; $arr=array(l,2,3,4); 3)数组元素的访问: 数组元素:数组中的每个数组数据; 下标值:定义数组时系统口动的给数组中的每个元素分配的索引; 数组名[下标值]: 数组的判断:is_array():判断某个变量是否是个数组; 4]数组的赋值: 1数组定义时直接赋值: $arr=array(数据1,数据2,数据3。。。); 2数组定义后再赋值: 数据名【下标值】二值 5]数组的分类: (1)索引数组: ..... 数组中所有的数组元素都是使用下标來标示; (2)关联数组: ..... 数组元素中只要有一个数组元素使用名字来标示,这个数组就叫做关联数组;键名:就是数组中被标示元素的名字(符号); 格式: 变量名=array ("键名”=>数据1, ”键名怙〉数据2, ”键名,S数据3.....); 6]关联数组的访问方式: 数组名r键名”] 数组名r键名”卜数据1; 关联数组和索引数组混写: 1)如果使用数值当键名,系统会认为键名就是键值,如果后而又没有键名的元素,那么该数组元素在原有数组元素上加1; 2)如果数组中都是用键名标示的数组元素,只有个别元素是用键值标示的那么键值从0开始; 3)如果数组中的键值没用序列那么新添加的数组元素会在最大的键值上加1; 数组的遍历:就是显示或者得到数组屮的所有的数据; ******************************************************************************* *******************
课程教学大纲( - 学年第学期) 课程代码: 课程名称:PHP程序设计 编写人: 电话: 电子邮件: 编写日期: 教研室主任: (签名)教学部负责人审核:(签名)
《PHP程序设计》教学大纲 一、教学性质 本课程属于计算机软件开发专业的一门计算机编程语言基础课程,主要学习PHP程序设计语言的知识和应用,具体包括PHP概述、HTML基础、PHP语法基础、流程控制结构、PHP数组、PHP网站开发、MySQL数据库技术和PHP、MySQL数据库编程技术、面向对象技术、PHP安全与加密技术和B2C电子商务网站开发等。 二、教学目标 通过本课程的学习,课堂上先结合案例讲解PHP的基本语法等知识,再通过上机实践和课后练习,进行实际案例的开发。使学生能够更加全面地理解PHP语言的语法结构和运行原理,并能熟练地运用PHP和MySQL等知识进行项目开发。 三、教学内容 第1章PHP概 1.1 PHP入 1.1.1 PHP 技 1.1.2 PHP工作原 1.2 PHP环境搭 1.2.1 安装AppServ集成软 1.2.2 安装Zend Studio开发工具 1.3使用Zend Studio开发PHP程序 第2章网站开发基础
2.1 HTML知识 2.1.1 HTML基本标签 2.1.2 HTML表单控件 2.2 CSS样式知识 2.2.1 CSS编码位置与格式 2.2.2 CSS编码格式 2.2.3 CSS属性 2.2.4 DIV+CSS 2.3 JavaScript知识 2.3.1 JavaScript基础语法 2.3.2 JavaScript控制语句 2.3.3 JavaScript函数和事件处理机制第3章PHP语法基础 3.1 PHP标记与注释 3.1.1 PHP标记 3.1.2 PHP注释 3.2 PHP的数据类型 3.2.1 标量数据类型 3.2.2 复合数据类型 3.2.3 特殊数据类型 3.2.4 数据类型检测函数 3.2.5 数据类型转换函数
php如何去除数组中相同的元素 如何去除数组中相同的元素?在php手册中这样写,希望对大家有用,更多内容请关注网! array_unique( 4 >= 4.0.1) array_unique -- 移除数组中重复的值 说明 array array_unique ( array array) array_unique() 接受 array 作为输入并返回没有重复值的新数组。 注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。 注: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。就是说,当字符串的表达一样时。 第一个单元将被保留。 例子 1. array_unique() 例子 [php] $input = array ("a" => "green", "red", "b" => "green", "blue", "red"); $result = array_unique ($input); print_r($result); ?> [/php] 【拓展阅读】PHP必须知道的容易出错的小细节 注意echo和print的区别 PHP中echo和print都是输出的作用,但是两者之间还是有细微的差别。echo输出后没有返回值,但print有返回值,当其执行失败时返回flase。因此可以作为一个普通函
数来使用,例如执行$r = print "Hello World"; 变量$r的值将为1。而且代码中echo语句 的运行效率要略快于print语句。 注意空字符串('')和NULL的区别 PHP中空字符串和NULL都是以值为0存储的,但是他们的类型并不一样,前者是string,而后者是NULL,可见字符串('')、NULL值相等但类型不等。 分清==(等于)和===(全等于)的区别 两者都属于比较运算符,==(等于)只比较值是否相等,而===(全等于)则不但比较值 是否相等,还会比较类型是否相等,它更为严格。 分清include与require的区别 include()与require()的功能也基本相同,但在用法上也有一些不同,include()是有 条件包含函数,而require()则是无条件包含函数。例如在下面代码中,如果变量$a为真,则将包含文件a.php。而require()则和include()不同,不管$a取何值,下面的代码都会 把文件a.php包含,比如: 在错误处理方面,使用include语句,如果发生包含错误,程序将跳过include语句,虽然会显示错误信息但是程序还是会继续执行。但是,require语句会提示一个致命错误。 注意isset和 empty的区别 empty是判断一个变量是否为“空”,而isset则是判断一个变量是否已经被设置。 分清self :: 和 this--> 的区别 在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成 const(常量)或者static(静态属性),那么就必须使用域操作符::,而如果被引用的变量或者方法没有被声明成const或者static,那么就使用指向操作符->。 foreach循环后留下悬挂指针 这里有个问题很多人会迷糊。循环结束后,$value并未销毁,$value其实是数组中 最后一个元素的引用,这样在后续对$value的使用中,如果不知道这一点,会引发一些 莫名奇妙的错误:)看看下面这段代码: 上面代码的运行结果如下: 1,2,3
实验报告三 课程名称:网站系统开发(基于PHP) 成绩: 实验项目名称:函数与数组实验时间:2014-11-27 指导教师(签名): 班级:121 姓名:姜英俊学号:201210701116 实验目的: 1.掌握PHP自定义函数。 2.掌握函数回调。 3.掌握PHP数组的创建与输出。 4.掌握PHP数组元素的赋值及相关函数的应用。 实验环境: WAMP(Windows下具有的Apache、MySQL和PHP环境),或者LAMP(Linux下具有的Apache、MySQL 和PHP环境) 实验内容及过程: 1、自定义一个递归函数编写反序逐位输出一个整数的程序。 【注意:】不能利用strrev($s)输出反序。 2、参考课件的4.6.2 使用变量函数声明和应用的回调函数,写一个程序可以过滤0-30以内的质数和偶数。 3、自定义的两个数组,分别为索引数组和关联数组,每个数组必须至少有4个元素,使用print_r( )函数输出数组元素。 4、编写一个随机抽奖程序,示例运行结果如下:
5、定义一个三维数组$categories,用于存放Car,Van和Truck的产品信息,并使用foreach循环完成数组的遍历,显示结果如下。 实验结果及分析:
PHP数组详解 一、数组的分类: 1.索引数组:就是以数字为数组元素下标,以0开始。 2.关联数组:以字符串为数组下标。 二、数组的定义: 在PHP中定义数组非常灵活,不需要再创建数组的时候指定数组的大小,甚至不足要在使用数组前先行生命,也可以在同一个数组中存储多类型的数据,并且支持一维数组以及多维数组。 1.声明数组: A、直接赋值声明: B、使用array()语言结构新建数组: C、多维数组的声明:
内层为索引数组 内层为关联数组 三、数组遍历 在其它语言中大多是运用for循环逐个输出,而在PHP中即可以用for循环,也可以用数组特有的遍历方式foreach()。 1.for循环便利:它只能便利索引数组 2.foreach()遍历:即可以遍历索引数组,也可以便利关联数组。 A、一维数组遍历:
第一种语法格式 第二种语法格式 B、多维数组遍历:
3.联合使用list()、each()和while循环遍历数组 注意:这三个函数是另外一个比较简便的方式,但是他们只能便利索引数组。 A、each()函数:需要传递一个数组作为参数,返回数组中当前元素的键/值对并向后移动数组的指针到下一个元素的位置 B、list()函数:list()用一步操作给一组变量进行赋值,即使把数组中的一些变量, 它仅能用于数字索引的数组,并假定数组索引从0开始。 将echo()与list()合并使用 C、while循环便利数组
4.使用数组的内部指针控制函数遍历数组 Current():取得目前指针位置的内容资料 Key():读取目前指南针所指向资料的索引值 Next():将数组中的内部指针移到下一个单元 Prev():将数组的内部指针倒回一位 End():将数组的内部指针指向最后一个元素 Reset():将目前指针无条件移至第一个索引位置
数组array是一组有序的变量,其中每个变量被叫做一个元素。 定义和用法 可以用array()语言结构来新建一个数组。它接受一定数量用逗号分隔的key => value参数对。 array( [key =>] value, ... ) // key可以是数字或者字符串// value可以是任何值 用foreach 循环显示数组元素: "; echo "
"; } foreach($phpjc as $key=>$value) { echo $key.": ".$value; echo "
"; echo "
"; } ?> 用print_r() 函数输出数组:
print_r($phpjc); ?> 输出: word [1] => excel [2] => outlook [3] => access ) ?> count() 函数计算数组元素的个数 分割数组 array_chunk() 定义和用法 array_chunk() 函数把一个数组分割为新的数组块。 其中每个数组的单元数目由 size 参数决定。最后一个数组的单元数目可能会少几个。 可选参数 preserve_key 是一个布尔值,它指定新数组的元素是否有和原数组相同的键(用于关联数组),还是从 0 开始的新数字键(用于索引数组)。默认是分配新的键。 语法 array_chunk(array,size,preserve_key) 参数 描述 array 必需。规定要使用的数组。 size 必需。规定每个新数组包含多少个元素。 preserve_key 可选。可能的值: ? true - 保留原始数组中的键名。 ? false - 默认。每个结果数组使用从零开始的新数组索引。
第3章 PHP数组
3.1 数组的定义 一个变量可以理解为包含单个值的容器,而数组则正好相反,可以包含多个值。数组是数据值的集合,是一个可以存储一组或一系列数值的变量。一个数组可以具有许多个元素。每个元素都有一个值。PHP允许一个数组包括不同数据类型的元素,例如字符串、数字或另一个数组。一个包含其他数组的数组称为多维数组。 存储在数组中的值称为数组元素,数组中的元素是在索引(也称下标)的基础上被引用和操作的。根据索引类型的不同,PHP数组可分为数字索引数组和关联数组。 数字索引数组的索引是从0开始的整数,而关联数组的索引是字符串。实质上,在PHP内部所有的数组都被存储为关联数组,只是数字索引数组将索引特别指定到了数字。 注意: 关联数组与数字索引数组唯一的区别在于索引的类型。 与其他许多语言中的数组不同,PHP不需要在创建数组时指定数组的大小,甚至不需要在使用数组前先行声明。 3.2 数字索引数组 大多数编程语言都支持数字索引数组。数字索引数组是指数组元素的索引为整数的数组,索引从0开始,依次递增。当需要通过相对位置来确定数组元素时,通常使用数字索引数组。数字索引数组也称为枚举数组、标量数组或简单数组,图3-1是一个数字索引数组的示例。 其中数组名为$name,包括数组元素:“张明”、“李四”、“王小五”、“赵勤”和“李小平”。可以通过索引(下标)O来引用“张明”,通过索引1来引用“李四”,通过索引2来引用“王小五”,依此类推。要引用PHP中的元素,需要使用一对中括号([]),例如以下语句可以显示索引2的数组元素值: echo $name[2]; 注意: PHP的数字索引数组默认以0开始,而不是1,这与C、C++、Java等许多编程语言相同。数组最后一个索引号等于数组中元素个数减1 3.2.1 数字索引数组的初始化 由于PHP中数组没有大小限制,所以在为数组初始化的同时就一并对数组进行了声明。数字索引数组初始化通常有两种方法。其中之一是直接为数组元素赋值。例如要初始化如图3-1所示的数字索引数组,代码如下: $name[O]= "张明"; $name[1]= "李四";
PHP Array 函数 函数描述 array() 创建数组。 array_change_key_case() 返回其键均为大写或小写的数组。 array_chunk() 把一个数组分割为新的数组块。 array_combine() 通过合并两个数组来创建一个新数组。 array_count_values() 用于统计数组中所有值出现的次数。 array_diff() 返回两个数组的差集数组。 array_diff_assoc() 比较键名和键值,并返回两个数组的差集数组。 array_diff_key() 比较键名,并返回两个数组的差集数组。 array_diff_uassoc() 通过用户提供的回调函数做索引检查来计算数组的差集。array_diff_ukey() 用回调函数对键名比较计算数组的差集。 array_fill() 用给定的值填充数组。 array_filter() 用回调函数过滤数组中的元素。 array_flip() 交换数组中的键和值。 array_intersect() 计算数组的交集。 array_intersect_assoc() 比较键名和键值,并返回两个数组的交集数组。 array_intersect_key() 使用键名比较计算数组的交集。 array_intersect_uassoc() 带索引检查计算数组的交集,用回调函数比较索引。array_intersect_ukey() 用回调函数比较键名来计算数组的交集。 array_key_exists() 检查给定的键名或索引是否存在于数组中。 array_keys() 返回数组中所有的键名。 array_map() 将回调函数作用到给定数组的单元上。 array_merge() 把一个或多个数组合并为一个数组。 array_merge_recursive() 递归地合并一个或多个数组。 array_multisort() 对多个数组或多维数组进行排序。 array_pad() 用值将数组填补到指定长度。 array_pop() 将数组最后一个单元弹出(出栈)。 array_product() 计算数组中所有值的乘积。
PHP语言基础简单整理 1.开始结束标记 ... ?> 2.定义变量:$变量名例:$str="锦清笋";不需要指明数据类型 3.输出语句: (1)echo "hello world!";---echo命令 (2)print();输出语句,是函数,有返回值。输出成功返回1,失败返回0。 (3)printf();格式化输出字符串。例:printf("%d,%f",12,12.3); (4)sprintf();格式化拼接字符串,不是输出语句,只能将字符串拼接。 (5)print_r();输出数组、对象等复合数据类型 4.数据类型: (1)简单数据类型: Boolean 布尔型 string 字符串型 integer 整型 float 浮点型 (2)复合数据类型: array 数组 object 对象 (3)特殊数据类型: resource 资源 null 空值 5.数据类型转换: 在变量前加上括号括起来的类型名称即可。 6.检测数据类型: is_bool 检查变量是否是布尔类型 is_string .... is_float或is_double .... is_integer 或is_int .... is_null .... is_array .... is_object .... is_numeric 检测变量是否为数组或由数字组成的字符串 7.声明和使用常量: 定义语法:define(‘PRICE’,100); echo PRICE; 8.变量作用域: 局部变量:即在函数的内部定义的变量,其作用域是所在的函数 全局变量:即被定义在所有函数以外的变量,其作用域是整个php文件,但是在用户定义的函数内部不可用。想在用户定义的函数内部使用全局变量,要使用global关键词声明。例:$a=123; function test() { global $a;