php教程数组声明,遍历,数组全局变量
<?php
/*
* 一、数组的概述
* 1.数组的本质:管理和操作一组变量,成批处理
* 2.数组时复合类型(可以存储多个)
* 3.数组中可以存储任意长度的数据,也可以存储任意类型的数据
* 4.数组可以完成其他语言数据结构的功能(链表,队列,栈,集合类)
*
*
*
* 二、数组的分类
* 数组中有多个单元,(单元称为元素)
* 每个元素(下标[键]和值)
* 单访问元素的时候,都是通过下标(键)来访问元素
* 1.一维数组,二维数组,三维数组。。。多维数组
* (数组的数组,就是在数组中存有其他的数组)
* 2.PHP中有两种数组
* 索引数组:就是下标是顺序整数的索引
* 关联数组:就是下标是字符串作为索引
*
* 下标(整数,字符串)只有这两种
*
*
* 三、数组多种声明方式
*
* 1.直接为数组元素赋值声明
* 如果索引下标不给出,就会从0开始顺序索引
* 如果给出索引下标,下一个就会从最大的开始增1
* 如果后面出现前面的下标,如果是赋值就是为前面的元素重新赋值
* 混合声明时,索引和关联不互相影响(不影响索引下标的声明)
*
* 2.使用array()函数声明
* 默认是索引数组
* 如果为关联数组和索引数组指定下标,使用 键=>值
* 多个成员之间使用" , "分割
* 3.使用其他的函数声明
*
*
*
*
*/
//索引数组
$user[0]=1;//用户序号
$user[1]="zhangsan";//用户名
$user[2]=10;//年龄
$user[3]="nan";//性别
echo '<pre>';
print_r($user);
echo '</pre>';
//关联数组
$user["id"]=1;
$user["name"]="zhangsan";
$user["age"]=10;
$user["sex"];
$user["age"]=90;//赋值
echo $user["name"];//输出
//使用array()声明数组
$user=array(1,"zhangsan",10,"nan");
//使用array()声明关联数组
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
//声明多维数组(多条记录),来保存一个表中的多条用户信息记录
$user=array(
//用$user[0]调用这一行,比如调用这条记录中的姓名,$user[0][1]
array(1,"zhangsan",10,"nan"),
//用$user[1]调用这一行,比如调用这条记录中的姓名,$user[1][1]
array(2,"lisi",20,"nv")
);
//数组保存多个表,每个表有多条记录
$info=array(
"user"=>array(
array(1,"zhangsan",10,"nan"),
array(2,"lisi",20,"nv")
),
"score"=>array(
array(1,90,80,70),
array(2,60,40,70)
)
);
echo $info["score"][1][1];//输出60,
?>
数组超级全局变量
<?php
/* 预定义数组:
* 自动全局变量---超全局数组
*
* 1.包含了来自WEB服务器,客户端,运行环境和用户输入的数据
* 2.这些数组比较特别
* 3.全局范围内自动生效,都可以直接使用这些数组
* 4.用户不能自定义这些数组,但这些数组的操作方式和自己定义的数组操作的方式一样
* 5.在函数中直接可以使用这些数组
*
* $_GET //经由URL请求提交至脚本的变量
* $_POST //经由HTTP POST 方法提交到脚本的变量
* $_REQUEST //经由GET , POST和COOKIE机制提交 到脚本的变量
* $_FILES //经由http post方法文件上传而提交至脚本的变量
* $_COOKIE
* $_SESSION
* $_ENV //执行环境提交至脚本的变量
* $_SERVER //变量由WEB服务器设定的,或直接和当前脚本的执行环境相关联
* $GLOBALS //只要是当前脚本有效的变量都在这里,数组的键名为全局脚本的名称
*
*
*/
//超全局数组在函数内部可以直接调用
$arr=array(10,20);//一般数组
$_GET=array(50,90);//超全局数组
function demo(){
global $arr;//调用全局变量要先包含
print_r($arr);
print_r($_GET);//直接调用超全局数组不用包含
}
?>
<!-- **********页面传值get请求*************** -->
<?php
//直接把传的值当变量用,当php.ini配置文件中register_global=on时有用。
echo $username."<br>";
echo $email."<br>";
echo $page."<br>";
//最稳定的取值方法
echo $_GET["username"]."<br>";
echo $_GET["email"]."<br>";
echo $_GET["page"]."<br>";
?>
<a href="demo.php?username=zhangsan&email=aaa@bbb.com&page=45">this is a $_GET test</a>
<!-- ***********页面传值post请求**************** -->
<form action="demo.php" method="post">
username:<input type="text" name="uname" /> <br/>
password:<input type="password" name="pass" /> <br/>
<input type="submit" value="login" /> <br />
</form>
<?php
print_r($_GET);//不能接收到
print_r($_POST);//这样才能接收到
?>
<?php
//$_ENV的使用
echo'<pre>';
print_r($_ENV);
echo'</pre>';
//显示当前环境
// 也可以单个遍历
?>
<?php
//利用$GLOBALS超全局数组在函数内部调用全局变量
$a=100;
$b=200;
$c=300;
function demo()
{
//直接调用全局变量
echo $GLOBALS["a"]."<br>";
echo $GLOABLS["b"]."<br>";
echo $GLOABLS["c"]."<br>";
}
?>
数组遍历
<?php
/* 数组的遍历
*
* 1.使用for语句循环遍历数组
* 1.其他语言(只有这一种方式)
* 2.PHP中这种方式不是首选的方式
* 3.数组必须是索引数组,而且下标必须是连续的。
* (索引数组下标可以不连续,数组还有关联数组,这两种不能遍历)
*
* 2.使用foreach语句循环遍历数组
* foreacho(数组变量 as 变量值){
* //循环体
* }
* 1.循环次数由数组的元素个数决定
* 2.每一次循环都会将数组中的元素分别赋值给后面变量
*
* foreach(数组变量 as 下标变量=> 值变量){
* }
*
*
* 3.while() list() each() 组合循环遍历数组
*
* each()函数:
* 1.需要一个数组作为参数
* 2.返回来的也是一个数组
* 3.返回来的数组是0,1,key,value四个下标(固定的)
* 0和key下标是当前参数数组元素的键
* 1和value下标是当前参数数组元素的值
* 4.默认当前元素就是第一个元素
* 5.每执行一次后就会将当前元素向后移动
* 6.如果到最后的元素再执行这个函数,则返回false
* list()函数:
* 1. list()=array();需要将一个数组赋值给这个函数
* 2.数组中的元素个数,要和list()函数中的参数个数相同
* 3.数组中的每个元素值会赋值list()函数中的每个参数,list()将每个参数转为变量
* 4.list()只能接受索引数组
* 5.按索引的下标顺序来给参数赋值
*
*
*
*/
//for语句遍历数组
$user=array(1,"zhangsan",40,"nan");
for($i=0;$i<4;$i++)
{
echo"$user[{$i}]=".$user[$i]."<br>";
}
//使用foreach
$user=array(1,"zhangsan",40,"nan");
foreach($user as $val)//$val是自定义变量
{
echo $val."<br>";//输出与下标无关
}
foreach($user as $key=>$val)//$val $key 都是自定义变量
{
echo $key."=====>".$val."<br>";
}
//foreach遍历多维数组
$info=array(
"user"=>array(
//$user[0]
array(1, "zansan", 10, "nan"),
//$user[1][1]
array(2, "lisi", 20, "nv"), //$user[1]
//$user[2]
array(3, "wangwu", 30, "nan")
),
"score"=>array(
array(1, 100, 90, 80),
array(2, 99, 88, 11),
array(3, 10, 50, 88)
),
"connect"=>array(
array(1, '110', 'aaa@bbb.com'),
array(2, '120', 'bbb@ccc.com'),
array(3, '119', 'ccc@ddd.com')
)
);
foreach($info as $tableName=>$table)
{
echo '<table align="center" width="500" border="1">';
echo '<caption><h1>'.$tableName.'</h1></caption>';
foreach($table as $row)
{
echo '<tr>';
foreach($row as $col)
{
echo '<td>'.$col.'</td>';
}
echo '</tr>';
}
echo '</table>';
}
//each()的使用
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
$a=each($user);//Array ( [1] => 1 [value] => 1 [0] => id [key] => id ) 默认是第一个元素的值
print_r($a);
$b=each($user);
print_r($b);//Array ( [1] => zhangsan [value] => zhangsan [0] => name [key] => name ) 每执行一次,向后遍历一个
$c=each($user);
print_r($c);//Array ( [1] => 10 [value] => 10 [0] => age [key] => age )
$d=each($user);
print_r($d);//Array ( [1] => nan [value] => nan [0] => sex [key] => sex )
$e=each($user);
var_dump($e);//bool(false) 当没有元素时,返回的值
//each()配合while遍历
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
while($arr=each($user))
{
//echo $arr[0]."====>".$arr[1]."<br>";//通过0,1 来显示 键(下标) 和 值
echo $arr["key"]."===>".$arr["value"]."<br>";//通过key,value 来显示 键 值
}
//list()函数的使用
list($name,$age,$sex)=array("zhangsan",10,"nnnnn");
echo $name."<br>";
echo $age."<br>";
echo $sex."<br>";
//另一种使用方法
list(,,$sex)=array("zhangsan",10,"nnnnn");
echo $sex."<br>";//只把性别转换为变量
//ip判断
$ip="192.168.1.128";
list(,,,$d)=explode(".",$ip);//explode表示用 . 来分隔,并返回一个数组
echo $d;//取出128
//list()只能接收索引数组的例子
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
list($key,$value)=each($user);//Array( [1]=>1 [0]=>id) 按照索引下标的顺序给list中的参数赋值,所以先是 0键 然后是 1值
echo $key."--->".$value;
//while list() each() 组合使用
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
while(list($key,$value)=each($user))
{
echo $key."--->".$value."<br>";
}
//多次循环只显示一次的解决方法
//使用数组的内部指针控制函数
//next(数组);数组指针移动到下一个
//prev(数组);数组指针移动到上一个
//reset(数组);数组指针移动到第一个(复位)
//end(数组);数组指针移动到最后一个
//current(数组);获取当前元素的值,当前元素时指数组指针指向的元素。
//key(数组);获取当前元素的键值(下标)
$user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
while(list($key,$value)=each($user))
{
echo $key."--->".$value."<br>";
}
//在这里将数组指针移动到第一个以下循环就能输出
//reset($user)
while(list($key,$value)=each($user))//因为each()到最后一个返回false,所以循环直接跳出
{
echo $key."--->".$value."<br>";
}
while(list($key,$value)=each($user))//因为each()到最后一个返回false,所以循环直接跳出
{
echo $key."--->".$value."<br>";
}
echo current($user)."=====>".key($user);
?>
首先来说说final
1.final不能用来修饰成员属性
2.final只能修饰类和方法
作用:被修饰的类不能被子类所继承;被修饰的方法不能被子类的方法覆盖。
< ?PHP
final class BaseClass {
public function test() {
echo "BaseClass::test() calledn";
}
final public function moreTesting() {
echo "BaseClass::moreTesting() calledn";
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() calledn";
}
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>
然后来说说static
1.static用来修饰成员属性和成员方法,但不能用来修饰类
2.用static修饰的成员属性可以被同一个类的所有对象共享
3.静态的数据是存在 内存中的 数据段中(初始化静态段)
4.静态的数据是在类在第一次加载时,分配到内存中的
5.什么是类被加载?只要在程序中使用到这个类(有这个类名出现)
6.静态的成员属性都要用类名去访问,不用创建对象,不用对象去访问;在类里边可以用self代表本类($this)
7.静态方法,不能访问非静态的成员属性(但是,在非静态方法却能访问静态的成员属性),非静态的成员属性,必须用对象访问,在内部访问非静态成员属性,用$this.
8.如果你确定一个方法中不需使用到非静态的成员属性,则可以将这个方法声明为静态方法,不需实例化对象,就可以访问
例子 演示需要静态变量的例子
<?PHP
function Test()
{
$w3sky = 0;
echo $w3sky;
$w3sky++;
}
?>
静态变量与递归函数
<?PHP
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test();
}
$count--;
}
?>
注: 静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。
例子 声明静态变量
<?PHP
function foo(){
static $int = 0;// correct
static $int = 1+2; // wrong (as it is an expression)
static $int = sqrt(121); // wrong (as it is an expression too)
$int++;
echo $int;
}
?>
最后来说说const
1.它只能用来修饰成员属性
2.在类中声明常量必须使用const
3.访问方式和访问静态成员属性一样(类外使用 类名::成员属性,类里边则使用self::成员属性)
4.常量一定要在声明的时候就给初始值
<?php教程
class say_const{
const CHARSET=”中国”;
publice function say_hello(){
echo slef::CHARSET;
}
}
$const1=new say_const()’
$const1->say_hello();
?>
常量只能包含标量数据(boolean,integer,float 和 string),不要定义 resource常量.
可以用函数 constant() 来读取常量的值.get_defined_constants()可以获得所有已定义的常量列表.
如果使用了一个未定义的常量,PHP 假定想要的是该常量本身的名字,如同用字符串调用它一样(CONSTANT 对应 “CONSTANT”),此时将发出一个 E_NOTICE 级的错误.
PHP 函数
在本教程中,我们将为您讲解如何创建自己的函数。
如需内建函数的参考和实例,请访问我们的 PHP 参考手册。
创建 PHP 函数
函数是一种可以在任何被需要的时候执行的代码块。
创建 PHP 函数:
函数功能简述。
语法: 返回类型 函数名称(类型 参数1, 类型 参数2....);
返回值: 变量类型
函数种类: 例如: 数据库教程, 网络..等等
内容说明
函数说明详述内容
使用范例
函数的范例 (本栏可能省略)
参考
小节索引 函数名称, 小节索引 函数名称... (本栏可能省略)
一个简单的函数,在其被调用时能输出我的名称的:
<html>
<body>
<?php教程
function writeMyName()
{
echo "David Yang";
}
writeMyName();
?>
</body>
</html>
现在,我们要在 PHP 脚本中使用这个函数了:
<html>
<body>
<?php
function writeMyName()
{
echo "David Yang";
}
echo "Hello world!<br />";
echo "My name is ";
writeMyName();
echo ".<br />That's right, ";
writeMyName();
echo " is my name.";
?>
</body>
</html>以上代码的输出:
Hello world!
My name is David Yang.
That's right, David Yang is my name.
缩合上面我们来写关于php函数详细教程
<?php
/*
* 1.内部函数:PHP可以在函数内部再声明函数
* 目的就是在函数内部调用
* 用来帮助外部函数完成一些子功能
*
* 2.递归函数:在自己内部调用自己的函数名
*
* 3.重用函数
*
* require:用于静态包含
* include:用于动态包含
* require_once:用于静态包含,只包含一次
* include_once:用于动态包含,只包含一次
*
* 4.一些系统函数的使用
* 资源=opendir("目录名")
* readdir(资源)
*
*
*/
//内部函数
function score($php,$java,$dotnet)
{
function php($php)
{
if($php>60)
return "及格";
else
return "不及格";
}
function java($java)
{
if($java>60)
return "及格";
else
return "不及格";
}
function dotnet($dotnet)
{
if($dotnet>60)
return "及格";
else
return "不及格 www.111cn.net/c5-03/ ";
}
$total=$php+$java+$dotnet;
$agv=$total/3;
echo "你的php成绩是{$php}分,".php($php)."<br>";
echo "你的java成绩是{$java}分,".java($java)."<br>";
echo "你的dotnet成绩是{$dotnet}分,".dotnet($dotnet)."<br>";
echo "你的总分是:{$total}<br>";
echo "你的平均分是:{$agv}<br>";
}
score(50,90,70);
//递归函数
function demo($num)
{
echo $num."<br>";
if($num>0)
demo($num-1);
else
echo "--------------------------------<br>";
echo $num."<br>";
}
demo(10);
function total($dirname,&$dirnum,&$filename)
{
$dir=opendir($dirname);
readdir($dir)."<br>";
readdir($dir)."<br>";
while($filename=readdir($dir))
{
$newfile=$dirname."/".$filename;
echo $filename."<br>";
if(is_dir($filename
}
}
$dirnum=0;
$filenum=0;
total("c:/windows",$dirnum,$filenum);
echo "目录总数:".$dirnum."<br>";
echo "文件总数:".$filenum."<br>";
?>
我们实现最简单的文件上传功能,只要利用php教程自带的move_uploaded_file函数就可以方便实现
<?php
$tmp_filename = $_FILES['myupload']['tmp_name'];
if(!move_uploaded_file($tmp_filename,"/path/to/dest/{$_FILES['myupload']['name']}")) {
echo "An error has occurred moving the uploaded file.<BR>";
echo "Please ensure that if safe_mode is on that the " . "UID PHP is using matches the file.";
exit;
} else {
echo "The file has been successfully uploaded!";
}
?>
这两天学了写表单。总结于此,以备忘。
例子一(POST提交表单):
<form action= "chunkify.php教程" method= "POST" > |
<input type= "text" name= "word" /><br/> |
How long should be the chunks be? |
<input type= "text" name= "number" /><br /> |
<input type= "submit" value= "Chunkify" > |
$number = $_POST [ 'number' ]; |
$chunks = ceil ( strlen ( $word )/ $number ); |
echo "The $number-letter chunks of '$word' are:<br/>n" ; |
for ( $i = 0; $i < $chunks ; $i ++){ |
$chunk = substr ( $word , $i * $number , $number ); |
printf( "%d: %s<br />n" , $i +1, $chunk ); |
html显示出来的页面。
提交表单后php处理出来的页面。在这个例子中,我输入一个单词,然后给定一个长度,将单词等分成该长度的块。
演示了通过POST方法提交表单。
例子二(单选,GET接受表单):
<form action= "<?php echo $_SERVER['PHP_SELF'] ?>" method= "GET" > |
Select your personality attributes:<br/> |
<option value= "perky" >perky</option> |
<option value= "morese" >morose</option> |
<option value= "thinking" >thinking</option> |
<option value= "feeling" > feeling</option> |
<option value= "thrifty" >speed-thrift</option> |
<option value= "prodigal" >shopper</option> |
<input type = "submit" name= "s" value= "Record my personality" > |
if ( array_key_exists ( 's' , $_GET )){ |
$des = implode( ' ' , $_GET [ 'att' ]); |
echo "You have a $des personality." ; |
例子三(多选,GET接受表单):
注意到此时<select name="att[]" multiple> 下划线告诉GET你传输的是个数组,黑体字部分则是表示改选择框为多选框
<form action= "<?php echo $_SERVER['PHP_SELF'] ?>" method= "GET" > |
Select your personality attributes:<br/> |
<select name= "att[]" multiple> |
<option value= "perky" >perky</option> |
<option value= "morese" >morose</option> |
<option value= "thinking" >thinking</option> |
<option value= "feeling" > feeling</option> |
<option value= "thrifty" >speed-thrift</option> |
<option value= "prodigal" >shopper</option> |
<input type = "submit" name= "s" value= "Record my personality" > |
if ( array_key_exists ( 's' , $_GET )){ |
$des = implode( ' ' , $_GET [ 'att' ]); |
echo "You have a $des personality." ; |
例子四(复选框checkbox): 同样name="att[]"是告诉GET你传输的是一个数组, checked 则表示该选项为初始默认选择,同样上例,在标签内加入 selected="selected"也可以
让多选初始默认选择。
<form action= "<?php echo $_SERVER['PHP_SELF'] ?>" method= "GET" > |
Select your personality attributes:<br/> |
perky<input type= "checkbox" name= "att[]" value= "perky" checked /> <br/> |
morose<input type= "checkbox" name= "att[]" value= "morose" checked /> <br/> |
thinking<input type= "checkbox" name= "att[]" value= "thinking" /> <br/> |
feeling<input type= "checkbox" name= "att[]" value= "feeling" /> <br/> |
<input type = "submit" name= "s" value= "Record my personality" > |
if ( array_key_exists ( 's' , $_GET )){ |
if ( is_null ( $_GET [ 'att' ])) exit ; |
$des = implode( ' ' , $_GET [ 'att' ]); |
echo "You have a $des personality." ; |
例子五(单选框): 注意,同一个选项即可的单选必须name相等
<input type= "radio" checked= "checked" name= "Sex" value= "male" /> |
<input type= "radio" name= "Sex" value= "female" /> |
<input type= "radio" checked= "checked" name= "Se" value= "male" /> |
<input type= "radio" name= "Se" value= "female" /> |
<p>当用户点击一个单选按钮时,该按钮会变为选中状态,其他所有按钮会变为非选中状态。</p> |
例子六(stick form):一个表格如何要实现之前输入过的值在页面刷新后仍然存在可以如下
<form action = "<?php echo $_SERVER['PHP_SELF']; ?> " method= "POST" > |
<input type= "text" name= "fa" value= "<?php echo $f;?>" />; |
<input type= "submit" name= "Convert to Celsius" /> |
printf( "%.2lf is %.2lfC" , $f , $c ); |
都是一些简单的表单处理~