Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:完成的很不错, markdown中的多级标题, 下次注意
常量是一种特殊的变量,仅允许初始化一次,不允许更新,可以理解为只读变量,无作用域限制,常用来表示程序状态或者数据共享。
常量名前不需要加$
,但是常量名仍然要遵守PHP标识符的命名,常量名通常为大写字母。1.2常量的创建
函数创建:
define("常量名","常量值");
,该方法不能在类中创建常量,可以在常量值参数中使用表达式,比如用一个字符串加变量拼接的方式来作为常量值参数,define('常量名','某字符串'.某变量);
。
指令创建:const 常量名 ="常量值";
,该方法不能用表达式,只能用字面量。1.3代码实例和运行效果
$str = 'Dseven';
define('USERNAME','Dseven');//用define()方法创建常量
echo '用define()方法创建的常量USERNAME的值是:'.USERNAME.'<br>';
define('EMAIL',$str.'@php.cn');//用define()方法创建常量,并且常量值参数为表达式
echo '用define()方法,并用表达式作为参数,创建的常量EMAIL的值是:'.EMAIL.'<br>';
const USERAGE = 18;//用const方法创建常量
echo '用const方法创建的常量USERNAME的值是:'.USERAGE.'<br>';
2.单引号与双引号
2.1两者的共同点
都可以用来做字符串的定界符
2.2两者的不同点
单引号内部的值按字面量形式进行处理,即使包裹的有变量也不解析,只原样输出,可以理解为所见即所得。
双引号内部的值,将被解析,如果内部包裹有变量,可以将其值解析出来作为字符串的一部分。
双引号内部的变量通常用{}进行包裹,如果不包裹,变量和其它字符串贴着时则无法解析。
双引号内部需要用到双引号或者变量符$
等,要用转义符/
进行转义,它同样可以被解析。2.3代码实例和运行效果
$str = 'apple';
echo '1.我爱吃$str啊';//变量在单引号内,将作为字符串原样输出
echo '<br>';
echo '2.我爱吃'.$str.'啊';//变量在单引号外,并用连接符.进行连接。
echo '<br>';
echo "3.我爱吃{$str}啊";//变量名用{}包裹样式1,双引号可以解析它的值,并输出
echo '<br>';
echo "4.我爱吃${str}啊";//变量名用{}包裹样式2,双引号可以解析它的值,并输出
echo '<br>';
echo "5.我爱吃$str";//变量名不用{}包裹,后面无字符,此时可以正常输出
echo '<br>';
echo "6.我爱吃$str啊";//变量名不用{}包裹,并与后面的字符相邻,将出现错误,无法输出变量
3.索引数组与关联数组的常用操作
3.1创建数组
3.1.1索引数组的创建
$arrNum1 = [1,2,3];//用字面量赋值创建索引数组
echo '用字面量赋值创建的索引数组:'.print_r ($arrNum1,true).'<br>';
$arrNum2 = array('a','b','c');//用函数赋值
echo '用函数赋值创建的索引数组:'.print_r ($arrNum2,true).'<br>';
$arrNum3[] = 'Peter';//逐个给索引数组元素赋值
$arrNum3[] = 'Ben';
$arrNum3[] = 'Joe';
echo '用逐个赋值创建的索引数组:'.print_r($arrNum3,true).'<br>';
$arrNum4 = [0=>'volvo',1=>'bmw',2=>'toyota'];//用键值对赋值创建索引数组
echo '用键值对赋值创建的索引数组:'.print_r ($arrNum4,true).'<br>';
3.1.2关联数组的创建
$arrInfo = ['id'=>100,'name'=>'小张','grade'=>96];
echo '用键值对赋值创建的关联数组:'.print_r($arrInfo,true).'<br>';
$arrInfo1 = array('id'=>101,'name'=>'小李','grade'=>100);
echo '用函数赋值创建的关联数组:'.print_r($arrInfo1,true).'<br>';
$arrInfo2['id'] = 102;
$arrInfo2['name'] = '小王';
$arrInfo2['grade'] = 90;
echo '用逐个赋值创建的关联数组:'.print_r($arrInfo2,true).'<br>';
3.1.2多维数组的创建
$arrInfo = ['id'=>100,'name'=>'小张','grade'=>96];
$arrInfo1 = array('id'=>101,'name'=>'小李','grade'=>100);
$arrInfo2['id'] = 102;
$arrInfo2['name'] = '小王';
$arrInfo2['grade'] = 90;
$arrTable = [$arrInfo,$arrInfo1,$arrInfo2];
echo '<pre>多维数组创建方式1:'.print_r($arrTable,true).'</pre>><br>';
$arrTable1 = [
['id'=>100,'name'=>'小张','grade'=>96],
['id'=>101,'name'=>'小李','grade'=>76],
['id'=>102,'name'=>'小王','grade'=>91],
['id'=>103,'name'=>'小赵','grade'=>86]
];
echo '<pre>多维数组创建方式2:'.print_r($arrTable1,true).'</pre><br>';
3.2索引数组的遍历
3.2.1索引数组的遍历
$arrNum1 = [1,2,3];
print_r($arrNum1);
echo '<br>';
foreach($arrNum1 as $item){
echo $item.'<br>';
}
echo '这是遍历索引数组值<hr>';
$arrNum1 = [1,2,3];
print_r($arrNum1);
echo '<br>';
foreach($arrNum1 as $key=>$item){
echo $key.'=>'.$item.'<br>';
}
echo '这是遍历索引数组键和值<hr>';
3.2.2关联数组的遍历
$arrInfo = ['id'=>100,'name'=>'小张','grade'=>96];
print_r($arrInfo);
echo '<br>';
foreach($arrInfo as $item=>$value){//as后面以键值对形式出现,可以遍历关联数组的键名和值
echo $item.'=>'.$value.'<br>';
}
echo '这是遍历关联数组的键和值<hr>';
foreach($arrInfo as $value){//as后面只有一个变量时,只能遍历关联数组的值
echo $value.'<br>';
}
echo '这是遍历关联数组的值<hr>';
3.2.3多维数组的遍历
$arrTable1 = [
['id'=>100,'name'=>'小张','grade'=>96],
['id'=>101,'name'=>'小李','grade'=>76],
['id'=>102,'name'=>'小王','grade'=>91],
['id'=>103,'name'=>'小赵','grade'=>86]
];
foreach($arrTable1 as $key => $value){
echo '<pre>'.$key.'=>'.print_r($value,true).'</pre>';
}
echo '这次遍历取出来的是第一层键值对,其中值是数组<hr>';
foreach($arrTable1 as $key => $value){
foreach($value as $key1 => $item){
echo '<pre>'.$key1.'=>'.print_r($item,true).'</pre>';
}
}
echo '这次遍历取出来的是第二层键值对,其中值是一维数组的值<hr>';
3.3数组元素与变量之间的转换
3.3.1数组转换为变量
数组转为变量需要使用extract(array,extractrules,prefix)函数,其中array参数是拟进行变化的数组名,extract_rules为拟变化的数组中键名有问题时的处理方式,prefix参数为变量前缀且其与键名之间自动加”“。
$arrNum1 = [1,2,3];
$arrInfo = ['id'=>100,'name'=>'小张','grade'=>96];
$arrTable1 = [
['id'=>100,'name'=>'小张','grade'=>96],
['id'=>101,'name'=>'小李','grade'=>76],
['id'=>102,'name'=>'小王','grade'=>91],
['id'=>103,'name'=>'小赵','grade'=>86]
];
//索引数组键名为数字,不能直接做为变量名,需要使用extract(array,extract_rules,prefix)中加上第二个和第三个参数,
//第二个参数extract_rules的值EXTR_PREFIX_INVALID 表示仅在不合法或数字变量名前加上前缀 prefix
//第三个参数prefix可以输入准备加的前缀名
echo 'extract($arrNum1)返回值的类型是:'.gettype(extract($arrNum1)).'<br>';
echo '$arrNum1转换成的变量数量是:'.print_r(extract($arrNum1,EXTR_PREFIX_INVALID,num),true).'<br>';
echo "转换成的变量是:<br>\$numOne = $num_0;<br>\$numTwo = $num_1;<br>\$numThr = $num_2;<br>";
echo '<hr>';
//关联数组的键名如果符合变量命名的规范,可以直接用extract(array),而不需要加后面的参数
echo 'extract($arrInfo)返回值的类型是:'.gettype(extract($arrInfo)).'<br>';
echo '$arrInfo转换成的变量数量是:'.print_r(extract($arrInfo),true).'<br>';
echo "转换成的变量是:<br>\$id = $id;<br>\$name = $name;<br>\$grade = $grade;<br>";
echo '<hr>';
//二维数组也可转化为变量,不过变量是一个一维数组
echo 'extract($arrTable1)返回值的类型是:'.gettype(extract($arrTable1)).'<br>';
echo '$arrTable1转换成的变量数量是:'.print_r(extract($arrTable1,EXTR_PREFIX_INVALID,arr),true).'<br>';
echo '转换成的变量是:<br>';
echo '$arr0 = '.print_r($arr_0,true).'<br>';
echo '$arr1 = '.print_r($arr_1,true).'<br>';
echo '$arr2 = '.print_r($arr_2,true).'<br>';
echo '$arr3 = '.print_r($arr_3,true).'<br>';
echo '<hr>';
//用list()是数组与变量进行绑定,也可以将数组变换成变量,只用于索引数组,且假定数字索引从0开始
list($num1,$num2,$num3) = $arrNum1;
echo '$num1='.$num1.'<br>';
echo '$num2='.$num2.'<br>';
echo '$num3='.$num3.'<br>';
3.3.2变量转换成数组
变量转换成数组要使用compact() 函数。该函数创建一个由参数所带变量组成的数组,如果参数中存在数组,该数组中变量的值也会被获取。本函数返回的数组是一个关联数组,键名为函数的参数,键值为参数中变量的值。本函数执行的行为与extract()函数正好相反。
任何没有变量名与之对应的字符串都被略过。
//将变量转换为数组
$id = 100;
$name = '小张';
$grade = 96;
$arrTable = compact('id','name','grade');//此处引号内不要写$
print_r($arrTable);
echo '<hr>';
//将数组变量转换为二维数组
$arrInfo = ['id'=>100,'name'=>'小张','grade'=>96];
$arrInfo1 = ['id'=>101,'name'=>'小李','grade'=>76];
$arrTable1 = compact('arrInfo','arrInfo1','a','id');//参数a无变量名与之对应自动被忽略
echo '<pre>'.print_r($arrTable1,true).'</pre><br>';
3.4索引数组与字符串相互转换
//将数组转换成字符串
$arrInfo = ['id'=>100,'name'=>'小张','grade'=>96];//关联数组转换成字符串,只取里面的值,索引数组可用同样的方法转换成字符串。
$sql = implode('=',$arrInfo);
echo '待转换的数组是:'.print_r($arrInfo,true).'使用的胶合符是:=<br>';
echo '转换完成的字符串$sql的内容是:'.$sql.'<hr>';
//将字符串转换成索引数组
$name = 'Peter,Ben,Joe';
$arrName = explode(',',$name);
echo '待转换的字符串为:'.$name.'使用的分隔符是:,';
echo '<pre>转换完成的数组是:<br>'.print_r($arrName,true).'</pre><br>';
echo '<hr>';
3.5将关联数组转为索引数组
$arrInfo = ['id'=>100,'name'=>'小张','grade'=>96];$arrIndex = array_values($arrInfo);//只从关联数组中取值echo '待转换的关联数组是:'.print_r($arrInfo,true).'<br>';echo '转换成的索引数组是:'.print_r($arrIndex,true);
$num = 10;
if($num>5){
echo '进入大于5的分支';
}else{
echo '进入小于等于5的分支';
}
$num = 10;
if($num<3){
echo '数量少于3';
}elseif($num>=3&&$num<5){
echo '数量大于等于3且小于5';
}elseif($num>=5&&$num<15){
echo '数量大于等于5且小于15';
}else{
echo '数量大于等于15';
}
$num = 15;
switch($num){
case $num<3:
echo '数量少于3';
break;
case $num>=3&&$num<5:
echo '数量大于等于3且小于5';
break;
case $num>=5&&$num<10:
echo '数量大于等于5且小于10';
break;
default:
echo '数量大于等于10';
}