中软Day14
数据+模板 ==> 静态页面的片段
为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
模板引擎可以让将数据和HTML模板更加友好的结合,省去繁琐的字符串拼接,使代码更加易于维护。
我们通过ajax获取到数据后,需要把数据渲染到页面,在学习模板引擎前,我们的做法是大量的拼接字符串,对于结构简单的页面,这么做还行
但是如果页面结构很复杂,使用拼串的话代码可阅读性非常的差,而且非常容易出错,后期代码维护也是相当的麻烦。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="user">
<p>姓名: xx</p>
<p>年龄: xx</p>
<p>性别: xx</p>
<p>描述: xx</p>
</div>
<script>
// 找对象
var user = document.getElementById("user");
// 从后台通过 ajax 获取数据
var obj = {
name: "小王",
age: 18,
sex: "男",
desc: "暴躁"
}
// 字符串拼接
var htmlStr = " 姓名: "
+ obj.name + " " +
" 年龄: "
+ obj.age + " " +
" 性别: "
+ obj.sex + " " +
" 描述: "
+ obj.desc + " ";
user.innerHTML = htmlStr;
// 缺点:
// 1. html标签代码 和 js 代码混在一起, 代码冗余
// 2. 字符串拼接非常麻烦, 维护起来不方便
</script>
</body>
</html>
总结来说拼串渲染两大缺点:
BaiduTemplate:http://tangram.baidu.com/BaiduTemplate/
velocity.js:https://github.com/shepherdwind/velocity.js/
ArtTemplate:https://github.com/aui/artTemplate
artTemplate是使用最广泛,效率最高的模板引擎,使用npm install art-template命令下载。
通过调用模板引擎提供的template函数,告知模板引擎将特定模板和特定数据进行拼接,最终返回拼接结果。
// 模板引擎导入
const template = require('art-template');
// 模板编译
// 1.模板位置
// 2.向模板中传递要拼接的数据,对象类型,对象属性可以直接在模板中使用。
// result 拼接结果
const result = template('./views/index.html', {msg: 'Hello, art-template'});
<h2>{{value}}h2>
<h2>{{a ? b : c}}h2>
<h2>{{a + b}}h2>
<h2><%= value %>h2>
<h2><%= a ? b : c %>h2>
<h2><%= a + b %>h2>
如果数据中携带HTML标签,默认不会解析标签,会将其转义后输出。使用以下方式可以解析标签。
{{@ value }}
{{if 条件}} ... {{/if}}
{{if v1}} ... {{else if v2}} ... {{/if}}
<% if (value) { %> ... <% } %>
<% if (v1) { %> ... <% } else if (v2) { %> ... <% } %>
{{if gender='男'}}
{{else}}
{{/if}}
数据循环
{{each target}}
{{$index}} {{$value}}
{{/each}}
<% for(var i = 0; i < target.length; i++){ %>
<%= i %> <%= target[i] %>
<% } %>
each语法
{{each data v i}}
{{v.content}}
{{/each}}
子模版
使用子模板可以将网站公共区块(头部、底部)抽离到单独的文件中。
{{include './header.art'}}
<% include('./header.art') %>
模板继承
使用模板继承可以将网站HTML骨架抽离到单独的文件中,其他页面模板可以继承骨架文件。
{{extend './layout.html'}}
{{block 'head'}} ... {{/block}}
计算机网络知识
IP
地址
域名
IP的别名
DNS
地址簿
端口
区分服务
1.浏览器分析url(www.baidu.com)
2.浏览器向DNS服务器 请求解析 url(www.baidu.com)
3.DNS 把url 解析 成IP地址
4.浏览器和主机建立TCP(运输层协议)
5.浏览器发出http请求
6.服务器发送http响应
7.tcp链接释放
8.浏览器解析文件 完成显示界面
接受其他主机访问
查看本机的IP地址 cmd–> ipconfig
- 找到配置文件
- Deny form all 改为 allow form al
配置文件查找错误
1.找到路径 D:\develop\wamp\bin\apache\Apache2.4.4\bin
2.cmd 执行httpd
3.更正错误
4.重启服务
常见的后端编程语言
- php 相对简单 快速构造网站
- JavaScript nodeJS
- java jsp 处理高并发
- .net 微软
- python 蟒蛇
PHP
php 是一种后台编程语言 ,用于浏览器处理ajax请求的后端语言, 使用php可以开发动态网站和后台接口 (所谓接口就是url地址,用于给前端提供数据) 前后端分离 全栈
单引号和双引号区别:单引号将内容解析成字符串,双引号将内容解析成变量。
后端编写的代码都不能直接运行,要在服务器的环境下才能运行。
PHP是世界上最好的语言 ( 简单 )
html构造静态网站,php构造动态网站
php基本结构
PHP基本数据类型
PHP中有8种变量类型:boolean,integer,float/double,string,array,object,resource和null;
PHP中变量类型不是由程序设定,而是PHP根据程序运行上下文确定;
$s="字符串类型";
$i=100; //整数类型
$f=3.15; //浮点数类型
$lo=true; //逻辑类型
$ar=array("数组","类型");
$n=null; //null值,将变量值清空
字符串操作
-
字符串连接运算符".", 用于把两个字符串值连接起来
$str1 = 'My name is ';
$str2 = 'wuhen';
echo $str1.$str2;
//结果为My name is wuhen 使用.连接2个字符串
-
获取字符串长度 strlen()
$str3 = 'My name is wuhen';
echo strlen($str3);
//结果为16 返回$str4的长度
-
去掉字符串的首尾空格和特殊字符
//去除空格和特殊字符
$str4 = ' abcde ';
echo strlen($str4);
//结果为7 包含首尾的空格
echo strlen(trim($str4));
//结果为5 去除空格后的长度
echo strlen(ltrim($str4));
//结果为6 去除左边空格后的长度
echo strlen(rtrim($str4));
//结果为6 去除右边空格后的长度
-
大小写转换
- strtoupper() 转为为大写,并返回一个新的字符串
- strtolower() 转换为小写,并返回一个新的字符串
- ucfirst() 整个字符串首字母大写,并返回一个新的字符串
- ucwords() 每个字母大写,并返回一个新的字符串
//大小写转换
$str6 = 'my name is wuhen';
//strtoupper()
$strupper = strtoupper($str6);
echo $strupper;
//结果为 MY NAME IS WUHEN 不改变原数组
//strtolower()
$strlower = strtolower($strupper);
echo $strlower;
//结果为 my name is wuhen
//$ucfirst()
$strucf = ucfirst($str6);
echo $strucf;
//结果为 My name is wuhen 字符串首字母大写
//ucwords()
$strucw = ucwords($str6);
echo $strucw;
//结果为 My Name Is Wuhen 每个单词首字母大写
-
substr() 字符串截取,从字符串指定索引位置截取指定长度的字符,返回截取的部分。
//字符串截取
$str7 = 'This is test';
//截取2位
echo substr($str7,5,2);
//结果为 is
//长度参数不写时,则会截取剩下全部字符,
echo substr($str7,5);
//结果为 is test
-
strstr()字符串搜索截取 ,搜索一个字符串在另一个字符串中的第一次出现,返回字符串的剩余部分。
//字符串搜索
$str8 = 'This is a test';
echo strstr($str8,'a');
//结果为 a test
//在字符串找到a,返回a位置以及后面的字符串
-
strpos() 字符串查找 ,搜索一个字符串在另一个字符串中的第一次出现的位置,返回出现的位置。
//字符串查找
$str9 = 'This is a test';
//返回查找目标第一个的索引,索引从0开始
//没有设置起始位置参数,默认从开头开始查找
echo strpos($str9,'s');
//结果为 3
//从指定位置开始查找
echo strpos($str9,'s',10);
//结果为 12
-
str_replace()字符串替换,用一个字符串替换查找的字符串,并返回一个新的字符串。
//字符串替换
$str10 = 'This is a apple';
$newstr =str_replace('apple','cat',$str10);
echo $newstr;
//结果为 This is a cat
//在字符串中查找到apple并将其用cat替换,返回一个新的数组
运算符
-
算数运算符
用来执行数学上的算数运算
- 前置自增自减运算符,先运算再赋值
- 后置自增自减运算符,先赋值再运算
//算数运算符
$a = 100;
$b = 50;
echo $a+$b;//加法,结果为150
echo '
';
echo $a-$b;//减法,结果为50
echo '
';
echo $a*$b;//乘法,结果为5000
echo '
';
echo $a/$b;//除法,结果为2
echo '
';
//前置自增自减运算符
$var1 = ++$a;//先进行$a自加1,然后将结果赋值给$var1
echo $var1;//结果为101
echo '
';
echo $a;//结果为101
echo '
';
$var2 = --$a;//先进行$a自减1,然后将结果赋值给$var2
echo $var2;//结果为100
echo '
';
echo $a;//结果为100
echo '
';
//后置自增自减运算符
$var3 = $a++;//先将$a赋值给$var3,然后$a自加1
echo $var3;//结果为100
echo '
';
echo $a;//结果为101
echo '
';
$var4 = $a--;//先将$a赋值给$var4,然后$a自减1
echo $var4;//结果为101
echo '
';
echo $a;//结果为100
echo '
';
-
赋值运算符
$x1=10;
echo $x1; // 输出 10
$y1=20;
$y1 += 100;
echo $y1; // 输出 120
$z1=50;
$z1 -= 25;
echo $z1; // 输出 25
$i1=5;
$i1 *= 6;
echo $i1; // 输出 30
$j1=10;
$j1 /= 5;
echo $j1; // 输出 2
$k1=15;
$k1 %= 4;
echo $k1; // 输出 3
-
字符串运算符
- 字符串和数字连接时,使用
.
优先转换成字符串
- 字符串和数字连接时,使用
+
优先转换成数字
$a = "Hello";
$b = $a . " world!"; //串接字符
echo $b; // 输出 Hello world!
$x="Hello";
$x .= " world!"; //串接赋值字符
echo $x; // 输出 Hello world!
-
类型运算符
instance of 用于确定一个 PHP 变量是否属于某一类的实例。
class Dog{
}
$dog1=new Dog();
if($dog1 instanceof Dog){
echo '$dog是Dog对象的实例';
}else{
echo '$dog不是Dog对象的实例';
}
-
执行运算符
PHP 支持一个执行运算符:反引号(“), PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回。使用反引号运算符的效果与函数 shell_exec()
相同。
echo ''
;
echo `netstat -anb`;
-
比较运算符
比较运算符用于对两个变量或者表达式进行比较
- 如果比较一个整数和字符串,则字符串会被转换为整数
- 如果比较两个数字字符串,则作为整数比较
//比较运算符
$a=10;
$b=5;
$c='5';
$d='3';
var_dump($a<$b);//结果为bool(false)
var_dump($a<=$b);//结果为bool(false)
var_dump($a>$b);//结果为bool(true)
var_dump($a>=$b);//结果为bool(true)
var_dump($a==$b);//结果为bool(false)
var_dump($b==$c);//结果为bool(true),==只判断数值是否相等
var_dump($b===$c);//结果为bool(false),===判断数值和类型
var_dump($d<$c);//结果为bool(true),会转成整型来比较
-
逻辑运算符
-
与 &&
两边的表达式都为真,结果为真;有一假,结果返回假
-
或 ||
两边的表达式都为假,结果为假;有一真,结果返回真
-
非 !
返回与表达式相反的结果
-
and or
和上述逻辑运算符功能相同
-
逻辑异或 xor
两边的表达式一真一假 ,结果返回真,反之返回假
//逻辑运算符
$bool1 = true;
$bool2 = false;
var_dump($bool1 && $bool2);//结果为bool(false)
var_dump($bool1 || $bool2);//结果为bool(true)
var_dump(!$bool1);//结果为bool(false)
var_dump(($bool1 && $bool2) and ($bool1 || $bool2));
//结果为bool(false)
var_dump(($bool1 && $bool2) or ($bool1 || $bool2));
//结果为bool(true)
var_dump($bool1 xor $bool2);
//结果为bool(true)
-
错误控制运算符
PHP 支持一个错误控制运算符:@
。当将其放在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
@
一般可以和 die
配合使用,使致命错误不被忽略。
$num1=12;
$num2=$num1/0;//会输出警告信息
$num3=@($num1/0);//不会输出任何信息
?>
-
三元运算符
$num1=12;
echo $num1%2==0 ? '偶数' : '奇数';
?>
-
其他运算符
-
=> 数组下标符号
-
-> 对象成员访问符号
PHP注释
-
单行注释,注释内容中不可出现?
//php #php
-
多行注释
/*php*/
PHP变量
在php 中 变量必须以$开头 字母/数字/下划线 不能以数字开头 区分大小写
$a=1;
$b=2; //php与其他强类型语言不同,不需要在创建变量的时候为变量赋予固定的数据类型,php可以根据赋予给变量的值而自动确定其数据类型
$c=$a+$b; //php的变量同样与其他语言不同,只要这个量依然是变量,$符号就不能省略,否则会报错
echo $c;
$x=5;
$y=10;
function myTest(){
$y=10; //局部作用域
echo "测试函数内部的变量:
";
echo "变量x是:$x"; //编译报错,因为在php中全局变量因为不是在函数内部声明,所以不能用在函数内部,但是可以定义相同的变量
echo "
";
echo "变量y是:$y";
}
myTest();
echo "测试函数之外的变量:
";
echo "变量x是:$x";
echo "
";
echo "变量y是:$y
"; //编译报错,函数内部声明的变量同样不能用在函数外
function myTestTwo(){
global $x,$y; //global用于在函数内部访问全局变量,也就是让全局变量变得正在全局!
$y=$x+$y; //global在$GLOBALS[index]中存储了所有的全部变量,下标存有变量名,可以用来在函数内更新全局变量
}
myTestTwo();
echo "$y
";
function myTestThree(){
static $x=0; //类似于静态变量,通常当一个函数结束时,会释放掉所有变量的值,此时将不会产生累加效果
echo "$x
";
$x++; //但是,当我们加上static关键词之后,变量的值将不会释放,而会一直保存
}
myTestThree(); //0
myTestThree(); //1
myTestThree(); //2
-
变量作用域:
1.全局(Global)作用域,在函数外声明的变量只能在函数外使用
可使用global关键词在函数内访问全局变量
2.局部(LOCAL)作用域,在函数内声明的变量,只能在函数内使用
3.超全局作用域
-
变量其他注意事项:
1.变量会在首次为其赋值时被创建
2.PHP 根据变量的值,自动把变量转换为正确的数据类型,无需声明
3.当函数完成后会删除所有的变量,添加static关键字可使某个局部变量不被删除
-
定义变量
$name='i love php!';
echo '$name';//输出$name
echo "$name";//输出i love php!
echo "hello\nworld";//\n为转义字符
echo 'hello\nword';//\n原样输出
$number1=123;//定义十进制整数
$number2=0123;//定义八进制整数
$number3=0x123;//定义十六进制整数
$number4=0.123;//定义浮点数
$number5=2.3E+3;//$number5=2300
$number6=2.3E-2;//$number6=0.023
$array1=array('武汉','广州','南京');//定义一维数组
$array2=array(0=>'php',1=>'c#',2=>'java');//定义一维数组
echo ''
;//段楼开始标记
echo $array1[1];//输出广州
echo '
';//换行符
echo $array2[0];//输出php
echo '';//段落结束标记
$num1='5.23r*r';
$num2=1;
echo $num1+$num2;//输出6.23
?>
-
引用、静态变量及全局变量
$str1="hello";
$str2=$str1;//变量赋值
$str2=& $str1;//引用赋值
static $name='C#';//静态变量
$score=80;
function f(){
$score=100;
echo $score.'
';//输出100
global $score;//定义全局变量
echo $score;//输出80
}
f();//调用函数
?>
-
可变变量
//函数名可以用其他变量代替
//注意:只有在调用时才能使用变量,定义时不允许!
$name='wit';
$wit='hello,word';
echo $name.'
';//输出wit
echo $$name;//输出hello,word
?>
命名规则
常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH
变量名建议用下划线方式分隔 // $var_name
函数名建议用驼峰命名法 // varName
定界符建议全大写 // <<
声明常量
- unset() 中不能使用常量
- 常量前面没有美元符号($)
- 常量用 define() 函数定义,而不能通过赋值语句
- 常量也可以通过 const 来定义
- 常量的命名规范是“字母大写加下划线”,比如
TAX_RATE
echo strlen("返回字符串的长度函数strlen");
echo strpos("在一组字符中截取相应的片段","相应的片段");
//其他操作通过手册查询
-
定义常量,语法:
define(string constant_name,mixed_value,case_sensitive=true);
说明:第一个参数为常量名,第二个参数为常量值,第三个参数表示是否对大小写敏感(可选)。
-
获取常量的值,语法:
mixed constant(string const_name);
也可以通过常量名直接获取常量的值.
-
判断一个常量是否定义,语法:
bool defined(string const_name);
define("$PI", 3.1415926);
if(defined("$PI"))
{
echo $PI."
";
echo constant("$PI");
}
?>
//系统预定义的一些常量
echo constant("__FILE__");//输出PHP文件名
echo constant(_LINE_);//输出PHP程序行数
echo constant(PHP_VERSION);//PHP程序的版本
echo constant(PHP_OS);//P执行PHP解析器的操作系统名
?>
-
魔术常量
预定义变量
不需要声明就可以使用的变量,又称超全局变量。
$GLOBALS
$_COOKIE
$_ENV
$_FILES
$_GET
$_POST
$_REQUEST
$_SERVER
$_SESSION
-
综述
-
$_GET变量(数组)
Get这个词,常常出现在…
这叫做“表单以get方式提交数据”
则$_GET这个预定义数组变量,就是指以这种方式提交的所有数据的集合(数组)
对应来说,也可以以post方式提交数据。
实际上,在网页中,以get方式提交数据有多种形式:
形式一:
<form action=”abc.php” method=”get”>
项目一:<inputtype=”text” name=”uName”>
项目二:<inputtype=”password” name=”uPswd”>
<inputtype=”submit” value=”提交”>
</form>
形式二:<a href=”abc.php?uName=test1&uPswd=123”>文字。。。</a>
形式三:
<script>
Location.href=” abc.php?uName=test1&uPswd=123”;// 利用location对象的href属性
</script>
形式四:
<script>
Location.assign(“abc.php?uName=test1&uPswd=123”); // 利用location对象的方法assign()
</script>
不管是哪种形式的get提交过来的数据,获取数据是一样的。作用是:用户填写表单数据,并提交后,会将数据发送(提交)给页面abc.php,也可以理解为“打开”该网页。
在abc.php网页中
$v1=$_GET[‘uName’]; //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)
$v2=$_GET[‘uPswd’]; //该键名必须跟提交的时候名字完全一致(区分大小写)
echo ”v1=$v1,v2=$v2”;
echo “<hr />”;
echo “<pre>”;
var_dump($_GET); //var_dump()用于输出一个变量最完整的信息,输出$_GET这个数组
echo”</pre>”
?>
-
$_POST变量(数组)
类似于 G E T 变 量 ( 数 组 ) , _GET变量(数组), GET变量(数组),_POST代表页面通过post方式提交过来的数据所形成的数组。
-
post提交数据,通常只有一种形式:
<form action=”abc.php” method=”post”>
项目一:
项目二:
form>
作用是:用户填写表单数据,并提交后,会将数据发送(提交)给页面abc.php,也可以理解为“打开”该网页。
-
接受post数据的形式为(abc.php网页中):
$v1=$_POST[‘uName’]; //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)
$v2=$_POST[‘uPswd’]; //该键名必须跟提交的时候名字完全一致(区分大小写)
echo ”v1=$v1,v2=$v2”;
echo “<hr />”;
echo “<pre>”;
var_dump($_POST); //var_dump()用于输出一个变量最完整的信息,输出$_GET这个数组
echo”</pre>”
?>
注:网页中的form表单,一般都用post方式,get方式主要体现在其他3中形式。
-
$_REQUEST变量(数组)
R E Q U E S T 数 组 , 并 不 是 一 个 独 立 的 数 据 来 源 , 而 是 _REQUEST数组,并不是一个独立的数据来源,而是 REQUEST数组,并不是一个独立的数据来源,而是_GET数据和 P O S T 数 据 的 “ 总 和 ” , 即 _POST数据的“总和”,即 POST数据的“总和”,即_REQUEST数组中包括了所有 G E T 数 据 和 _GET数据和 GET数据和_POST数据——由系统自动存储的。
-
通常 G E T 数 据 和 _GET数据和 GET数据和_POST数据不会“同时出现”,$_REQUEST数组就代表了其中之一。
<form action=”abc.php” method=”post”>
项目一:
项目二:
<input type=”submit” value=”提交”>
form>
<form action=”abc.php” method=”get”>
项目一:
项目二:
<input type=”submit” value=”提交”>
form>
//两者接受数据都一样
-
当get与post同时提交的情形(一般只有一种html语法形式会出现该情形)
<form action=”abc.php?a=5&b=10”method=”post”>
项目一:<inputtype=”text” name=”uName”>
项目二:<inputtype=”password” name=”uPswd”>
<input type=”submit” value=”提交”>
</form>
//此时,uName和uPswd两个数据以post方式提交给abc.php,并a=5与b=10以get方式提交给abc.php
//则在页面中:
//这样取得get数据:
$v1=$_GET[‘a‘];
$v2=$_GET[‘b’];
//这样取得post数据:
$v1=$_POST[‘uName’];
$v2=$_POST[‘uPswd’];
//但也可以这样取
$v1=$_REQUEST[‘a‘];
$v2=$_REQUEST[‘b’];
$v3=$_REQUEST[‘uName’];
$v4=$_REQUEST[‘uPswd’];
-
当get数据和post数据同时提交并其中有重名的时:
-
尽量避免重名
-
如果重名了,此时$_REQUEST只会记录(存储)其中一个数据(要么post数据,要么get数据)
-
至于记录的是哪个,是由php.ini中的一个设置项决定
- request_order=”GP”;//这是默认值,G代表GET,P代表POST
- 含义是:先存储GET数据,再存储POST数据
- 可见如果重名,此时POST就会覆盖GET数据
- 改为:request_order=“PG”,顺序反过来
-
$_SERVER变量(数据)
该变量存储了服务器端或客户端的一些请求信息或设置信息,比较多,而且不同的服务器和不同的请求页面,其数据项都可能不同。
常用的有:
REMOTE_ADDR,用户的IP地址
SERVER_ADDR,服务器端的IP地址
SERVER_NAME,服务器名(主机名)
echo ”<table border=’1’>”;
foreach($_SERVER as $key=>$value){
echo “<tr>”;
echo “<td>$key</td>”;
echo “<td>$value</td>”;
echo “</tr>”;
}
echo “</table>”;
-
$GLOBALS变量(数据)
似乎是一个多余的变量:它只是把我们定义的所有全局变量存储到该数组中:
变量名就是该数组的下标(键名),变量值就是对应的值。
$v1=1;
$v2=2;
function f1(){
$v3=3;
$v4=4;
echo ”<br/>函数f1被调用!”;
}
f1();
echo ”<pre>GLOBALS数组内容为:<br />”;
var_dump($GLOBALS);
echo “</pre>”;
?>
//(全局变量v1,v2存入GLOBALS数组,而局部变量v3、v4没有存入GLOBALS数组)
//显示:
//函数f1被调用!
//GLOBALS数组内容为:
array(7) {
["GLOBALS"]=>
*RECURSION*
["_POST"]=>
array(0) {
}
["_GET"]=>
array(0) {
}
["_COOKIE"]=>
array(0) {
}
["_FILES"]=>
array(0) {
}
["v1"]=>
int(1)
["v2"]=>
int(2)
}
-
作用域问题
PHP中,自定义的变量的作用域分两种:全局变量(函数外)、局部作用域(函数内)
但预定义变量的作用域称为“超全局作用域”:全局作用域+局部作用域的总和(函数内外全都可用)
-
数据类型问题:超全局变量都是数组
PHP集合
-
数组
不能用数组和对象作为键(key),这样做会导致一个警告:illegal offsettype
php 数组是可以自动增长的
-
数组创建方式
//第一种,对数组的每一个元素赋值:
$arr[0]=1;
$arr[1]='Hello World';
//第二种:
$arr=array('张三','李四','王五');
//第三种:
$arr=array('no1'=>'张三','no2'=>'李四','no3'=>'王五');
-
数组的自动增长
$arr=array();
for($i=0; $i<20; $i++){
$arr[]=$i;
}
var_dump($arr);
-
数组的常用函数
-
删除数组或数组项
$arr = array('a','b','c','d');
unset($arr); // 删除数组
unset($arr[2]); // 删除数组项
-
数组遍历
//var arr = [1,3,5];
//arr[1];
$arr = array(1,3,5);
print_r($arr);
echo "
";
echo $arr[1];//echo不能取出数组但可以取出数组中的元素
//数组遍历
for($i=0;i<count($arr);$i++){
echo $arr[$i];
echo "
";
}
-
关联数组
$age1=array("Peter"=>"35");
//也可以
$age2=array('peter')="35";
echo "peter age is".$age1['Peter'];
echo "peter age is".$age2['peter'];
foreach ($age1 as $ag => $ag_value){
echo "age=".$ag."value".$ag_value;
}
?>
-
数组的运算符
$arr1 = array(1,6);
$arr2 = array(2,8,9);
$arr3 = $arr1 + $arr2;
print_r($arr3); // 1 6 9
-
数组的空间分配机制
函数名
作用
memory_get_usage()
返回分配给 PHP 的内存量
-
排序
-
冒泡排序
// 代码优化之后,速度有很大提升
$arr = array(12,23,34,1,-12,26,56,234,237,9);
function bubble(&$arr){
$flag = 0;
$arr_len=count($arr);
for($i = 0; $i < $arr_len-1; $i++){
for($j = 0; $j < $arr_len-1-$i; $j++){
if($arr[$j] > $arr[$j + 1]){
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
$flag = 1;
}
}
if($flag == 0){
break;
}else{
$flag = 0;
}
}
}
date_default_timezone_set('PRC');
echo '
' . date('H:i:s');
bubble($arr);
echo '
' . date('H:i:s');
echo ''
;
print_r($arr);
-
选择排序
$arr = array(12,34,99,3,45,103,4);
function selectSort(&$arr){
$arr_len=count($arr);
for($i = 0; $i < $arr_len; $i++){
$arr_min = $arr[$i];
$arr_index = $i;
for($j = $i; $j < $arr_len; $j++){
if($arr_min > $arr[$j]){
$arr_min = $arr[$j];
$arr_index = $j;
}
}
if($arr_index != $i){
$arr[$arr_index] = $arr[$i];
$arr[$i] = $arr_min;
}
}
}
selectSort($arr);
echo ''
;
print_r($arr);
-
插入排序
$arr = array(12,3,436,43,76,10);
function insertSort(&$arr){
$arr_len = count($arr);
for($i = 1; $i < $arr_len; $i++){
$index = $i - 1;
$arrItem = $arr[$i];
while($index >= 0 && $arr[$index] > $arrItem){
$arr[$index+1] = $arr[$index];
$index--;
}
$arr[$index+1] = $arrItem;
}
}
insertSort($arr);
echo ''
;
print_r($arr);
-
快速排序
四种排序速度:冒泡排序 < 选择排序 < 插入排序 < 快速排序
-
查找
-
顺序查找
$arr = array(12,3,34,45,111,23,5,67,23);
function search($arr,$item){
$arr_len = count($arr);
$flag = 0;
for($i = 0; $i < $arr_len; $i++){
if($item == $arr[$i]){
echo '找到了,索引值为:' . $i . '
';
$flag = 1;
}
}
if($flag == 0){
echo '很抱歉,没有找到哦。';
}
}
search($arr,23);
-
二分法查找
二分法查找适用于查找有序的数组。
$arr = array(1,3,6,12,22,34,45,56,67,99,122,155);
function searchNum($left_index,$right_index,$arr,$item){
if($left_index > $right_index){
echo '很抱歉,没有找到。';
return;
}
$mid_index = round(($left_index + $right_index) / 2);
if($arr[$mid_index] == $item){
echo '找到了,索引值为:' . $mid_index;
}else if($arr[$mid_index] > $item){
searchNum($left_index,$mid_index-1,$arr,$item);
}else if($arr[$mid_index] < $item){
searchNum($mid_index+1,$right_index,$arr,$item);
}
}
searchNum(0,count($arr)-1,$arr,288);
-
二维数组
$arr = array(array(12,23,34),array(123,345,333),100);
$arr_len = count($arr);
for($i = 0; $i < $arr_len; $i++){
$arr2_len = count($arr[$i]);
if(is_array($arr[$i])){
for($j = 0; $j < $arr2_len; $j++){
echo $arr[$i][$j] . ' ';
}
}else{
echo $arr[$i];
}
echo '
';
}
$arr = array(array(12,23,34),array(123,345,333),100);
foreach($arr as $val){
if(is_array($val)){
foreach($val as $v){
echo $v . ' ';
}
}else{
echo $val . ' ';
}
echo '
';
}
-
对象
//var dict = {"name":"lnj","age":"33"};
//dict["name"];
$dict = array("name"->"lnj","age"->"33");
print_r($dict);
echo "
";
echo $dict["name"];
流程控制
php分支循环语句
$age = 19;
if($age >= 18){
echo "成年";
}else{
echo "未成年";
}
$res = ($age>=18)?"成年":"未成年";
echo $res;
switch($age){
case 0:
echo "0";
break;
case 18:
echo "成年人";
break;
default:
echo "未成年"
break;
}
$index=0;
while($index < count($arr)){
echo $arr[$index];
echo "
";
$index++;
}
-
如何运行编写好的PHP文件?
因为PHP是服务端编程语言,所以要在服务端运行
- php文件名不能有中文
- php文件必须放到服务器文件夹下
- 通过ip找到服务器文件夹,选中php文件访问
-
服务端返回浏览器的是什么?
-
php程序的执行结果
注意:执行结果中有中文,必须要在php文件顶部设置
内容输出
- echo 输出简单数据类型 如字符串 数值等
- print 输出复杂数据类型 数组
- var_dump() 输出详细信息 如数组 对象
echo "这是第一个输出方法,调用echo";
print "这是第二个输出方法,调用print";
$text1="我是一个变量";
$cars=array("我","是","一","个","数","组","字","符","串");
echo $text1 . "$cars[1]"; //echo调用变量时可以用引号,也可以不用引号,推荐使用echo,因为其不返回值效率更高
注意:后端编写的代码不能直接运行,只能放到服务器对应的文件夹下,通过服务器运行
- 如何通过服务器运行:通过ip地址找到服务器对应的文件夹,然后再找到对应的文件运行
常用函数
定义函数
class Oj
{
var $object;
function Oj($object="oj"){
$this->object=$object;
}
function what_object(){
echo "函数调用成功";
}
} //定义
$test=new Oj("oj");
$test->what_object(); //对方法进行引用