0504 php基础整理 运算符 控制语句 数组 函数

运算符

算术运算符

有以下几个:+ () - * / )  %取余

注意:注意取余运算%,先取整,再取余

自增自减运算符: ++ (加加)   -- (减减)

常规:对数字进行自加1或自减1。

字符串: 只能自增,且自增的效果就是“下一个字符”

布尔值递增递减无效

ull递减无效,递增结果为1

前加加和后加加的区别:

++:先完成变量的递增运算,再取得该变量的值参与别的运算。

++:先将原来变量的值临时存储,再将变量值递增,最后再将临时存储的值参与别的运算。

推论1:如果独立语句中进行自加运算,前自加后自加没有区别 。

推论2:如果前自加后自加是放在别的语句中,则会有所区别。

  推论3: 前加加比后加加效率略高(在循环中建议使用前加加)。

比较运算符:

包括:>   >=    <    <=    ==松散相等    !=    ===严格相等     !==

=====的区别:

==:松散相等,比较的是两个数据“类型转换之后”是否有可能相等,也常常认为是“数据内容是否相同”

 

===:严格相等,全等,只有两个数据的类型和数据的内容都完全一致,才相等。

常见不同类型的比较(主要指标量类型的数据)——非正常比较

正常比较——数字的大小比较

如果有布尔值,转为布尔值比较规则:true > false

否则,如果有数字转为数字比较

否则,如果两边都是纯数字字符串,转为数字比较

否则就按字符串比较

字符串的比较规则为:按字符的先后顺序依次一个一个比较,发现哪个大,则就表示整体大,后续不再比较

逻辑运算符:&&   ||   !

前提:都是针对布尔类型的值进行的运算,如果不是布尔,就会转换为布尔。

逻辑与:&&

只有两个都是true,结果才是true只要有一个是false,结果就是false

逻辑或:||

只有两个都是false,结果才是false

只要有一个是true,结果就是true

逻辑非:

!true ==> false

!false ===>true

字符串运算符:

只有一个:  .    

衍生一个:  .=

会将运算符两边的数据转换为字符串。

对比js+(具有双重含义,此时就需要一定的“判断”)

赋值运算符:

只有一个:=

衍生多个:+=   -=   *=   /=   %=   .=

条件(三目)运算符:

一般的运算符需要2个数据参与

有几个运算符只需要一个数据参与: ++,   --   !

则:

条件运算符就需要至少3个数据参与!

形式为:数据1  ?  数据2 :数据3

通常,数据1最终应该是一个布尔值(如果不是,则会当作布尔值来使用)。

 判断语句

if语句:

  if(条件判断){

  //语句块

  } 

  if else 语句:

  if(条件判断){

  //分支1

  }

  else{

  //分支2

  }

switch语句:

  switch(一个数据$v1{ //判断此v1变量跟下面的某个是否相等,如果相等,则进入对应进程。

        case  状态值1

        //进程1

        [break;]

        case  状态值2

        //进程2

        [break;]

        case  状态值3

        //进程3

        [break;]

        。。。。。。

        [default //默认进程。]

   }

应用冲,break通常都会用上;只有一些特殊数据或需求的时候,可能不用。

如果没有使用break,则一旦某个状态满足,就会继续执行后续状态中的进程代码,而不再判断。

while循环:

$v1 = 10; //初始化循环变量

while$v14 ){ //判断循环变量的条件

    //语句快

    echo  “abc”;

    $v1--

  }

循环3要素:

1,循环变量初始化

2,循环变量判断

3,循环变量改变

3 要素通常适用于所有循环过程。

do while循环

do{

  //循环体

  }while(条件判断);

  含义:

  先执行一次循环体,然后判断条件,如果条件满足,则继续回去执行循环体,然后再判断,依次类推。

for循环:

循环的中断

这里指的中断,适用于所有循环。

循环的中断有两种情况:

break中断: 终止整个循环语句,而跳出循环进入到循环结构之后的语句

continue中断:跳过本次循环,执行下一次循环

 

控制脚本执行进度

 

die(“输出内容”)

 

含义:终止php脚本的运行(后续代码不再执行),并输出其中的内容

 

也可以:die(); die;

 

exitdie的同义词。

 

die是一种“语言结构”,并非函数,可以不写括号。

 

echo也是一种语言结构,而非函数:

 

echo (“abc”);

 

echo  “abc”;

 

echo  “abc”, “def”, 123;

 

sleep($n);

 

含义:让php脚本停止$n秒,然后继续执行。

数组基础

php中,数组的下标可以是整数,或字符串。

php中,数组的元素顺序不是由下标决定,而是由其“加入”的顺序决定。

定义:
$arr1 = array(元素1,元素2,。。。。。 );

 

array(1,  5,  1.1,  “abc”,  true,  false); //可以存储任何数据,此时为“默认下标”,

 

array(2=>1,  5=>5,  3=>1.1,  7=>“abc”,  0=>true);//下标可以任意设定(无需顺序,无需连续)

//默认下标规则:前面已经用过的最大数字下标+1

 

array(2=>1,  5,  1=>1.1,  “abc”,  0=>true)//可以加下标,也可以不加(默认下标),

下标分别是:2,3,1,4,0

 

array(2.7=>1,  ‘dd’=>5,  1=>1.1,  “abc”,  0=>true)

 

//浮点数下标为自动转换为整数,且直接抹掉小数

 

//纯数字字符串下标,当作数字看待,

 

//则此时下标为:2, ‘dd’, 11, 12, 13

array(2=>1,  ‘dd’=>5,  true=>1.1,  “abc”,  false=>true)//布尔值当下标,则true1false0

array(2=>1,  ‘dd’=>5,  2=>1.1,  “abc”,  true)//如果下标跟前面的重复,则单纯覆盖前面同名下标的值

//此时相当于为:array(2=>1.1,  ‘dd’=>5,  “abc”,  true)

数组的分类

从键值关系:

关联数组:通常是指下标为字符串,并且该字符串大体可以表达出数据的含义的数组。

例:$person = array(

    “name” => “小花”,  

    “age”=>18,

    “edu” => “大学毕业” 

  );

索引数组:

通常是指一个数组的下标是严格的从0开始的连续的数字下标——跟js数组一样。

 

从数组层次来分:

 

一维数组:

 

就是一个数组中的每一个元素值,都是一个普通值(非数组值)

 

$arr1 = array(

 

    “name” => “小花”,  

 

    “age”=>18,

 

    “edu” => “大学毕业” 

 

);

 

二维数组:

 

一个数组中的每一项,又是一个一维数组。

 

$arr1 = array(

 

    “name” => array(‘小花’,     ‘小芳’,   ‘小明’, );  

 

    “age”=> array(18,      22,       19),

 

    “edu” => array(“大学毕业”,  ‘中学’,    ‘小学’)

 

);

 

多维数组:

 

依此类推。。。

 

 

 

 

 

数组遍历

遍历基本语法

foreach( $arr   as   [ $key  => ] $value ) //$key可以称为键变量,$value可以称为值变量。

{

//这里就可以对$key  $value 进行所有可能的操作——因为他们就是一个变量

//$key 代表每次取得元素的下标,可能是数字,也可以能是字符串

//$value 代表每次取得元素的值,可能是各种类型。

//此循环结构会从数组的第一项一直遍历循环到最后一项,然后结束。

}

foreach 遍历细节探讨

foreach也是正常的循环语法结构,可以有break和continue等操作。

遍历过程中值变量默认的传值方式是值传递。

遍历过程中值变量可以人为设定为引用传递

foreach($arr as $key => &$value){ ... }

键变量不可以设定为引用传递

foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作(就是指前面的指针函数),则会复制数组后在复制的数组上继续遍历循环。

foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。

数组排序思想介绍

冒泡排序

一般性逻辑描述:

1,对该数组从第一个元素开始,从左到右,相邻的2个元素比较大小:如果左边的比右边的大,则将他们俩交换位置,结果:

<?php
 $arr2 = array(5,15,3,4,9,11);
 $len = count($arr2);
//1,需要进行n-1趟的“冒泡”比较过程。
echo "<br/> 排序之前:";
print_r($arr2);
for($i = 0; $i<$len-1;++$i){
    //设定比较的躺数
    //2, 每一趟的比较都前一趟少比一次,每一趟需要比较n-1次
    for($k=0;$k<$len-1-$i;++$k){
        //设定本趟比较的次数
        //这里实现下标为$k和下标为$k+1这两项的比较:
        if($arr2[$k]>$arr2[$k+1]){
            $temp = $arr2[$k];
            $arr2[$k]=$arr2[$k+1];
            $arr2[$k+1] = $temp;
        }
    }
}
echo "<br/>排序之后:";
print_r($arr2);

?>
冒泡排序

选择排序

一般性逻辑描述:

1趟:取得该数组中的最大值及其下标,然后跟该数组的最后一项“交换”(倒数第1项确定)

2趟:取得该数组中除最后1项中的最大值及其下标,然后跟倒数第2项交换(倒数第2项确定)

3趟:取得该数组中除最后2项中的最大值及其下标,然后跟倒数第3项交换(倒数第3项确定)

数组查找:

就是从一个数组中找一个元素的数据(可能是找下标,也可以是找数据值)

数组的查找通常有2种需求:

1:判断要找的数据是否存在。

2:找出要找的数据的位置(下标)

顺序查找

从一个数组中按顺序找出一个元素(下标或值)

二分查找

二分查找的前提:

1,针对一个已经进行了排序的数组(即里面的数据已经是有序了)

2,是连续的索引数组,比如下标为:0, 1, 2, 3, ......

函数

 

基本使用

 

函数定义形式

function  函数名 (形参1,形参2.... ){

    //函数体(代码块)

  }

函数调用形式

本质上就是使用一个名字来达到执行其中函数中的代码的作用。通常可以分两种情形的调用:

第一种:没有返回值的函数,则调用语句是独立语句:

函数名(实参1,实参2, .... ); //实参个数应该跟形参有匹配性。

第二种:有返回值的函数,则调用语句,通常会“混杂”在别的语句中,并将要将该调用语句当作一个“数据”来使用:

A$v1 =  函数名(); //赋值给其他变量;这里省略实参语法,下同。

B$v1 =  函数名() * 3 + 6; //参与运算,然后再赋值;

Cecho  函数名(); //直接输出

Decho  函数名() * 3 + 6; //参与运算,然后再输出

E$v1 = 函数名2( 函数名() , 实参2,实参3.... ); //当作实参使用

实际上,一个变量(数据)也只有这几种场合的使用情况。

函数调用形式

本质上就是使用一个名字来达到执行其中函数中的代码的作用。通常可以分两种情形的调用:

第一种:没有返回值的函数,则调用语句是独立语句:

函数名(实参1,实参2, .... ); //实参个数应该跟形参有匹配性。

第二种:有返回值的函数,则调用语句,通常会“混杂”在别的语句中,并将要将该调用语句当作一个“数据”来使用:

A$v1 =  函数名(); //赋值给其他变量;这里省略实参语法,下同。

B$v1 =  函数名() * 3 + 6; //参与运算,然后再赋值;

Cecho  函数名(); //直接输出

Decho  函数名() * 3 + 6; //参与运算,然后再输出

E$v1 = 函数名2( 函数名() , 实参2,实参3.... ); //当作实参使用

实际上,一个变量(数据)也只有这几种场合的使用情况。

 

函数参数问题

 

一个函数,

 

在定义时,有形式参数(形参);

 

1,形参一定是一个变量名!

 

2,该变量名只能是在该函数中有效的变量名;

 

3,而且只在该函数调用并执行时有效,函数结束,通常这些变量也就“销毁”。

 

在调用时,有实际参数(实参)。

 

实参就是一个“实际数据”,

 

该数据可以是一个“直接数据”(比如5”abc”),也可以是一个变量中存储的数据。

 

实参的作用是将其数据“赋值给”形参变量。

 

实参跟形参之间通常应该有个一一对应”关系:

 

定义形式:   function  函数名(形参1,形参2...... ){ 。。。。}

 

 

 

调用形式:    函数名(实参1,实参2.....

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2018-05-04 11:23  王保利d窝  阅读(179)  评论(0编辑  收藏  举报

导航