当前位置: 首页 > 后端技术 > PHP

2022-7-18`continue`、query相关、`array_unique`技术细节

时间:2023-03-30 00:01:38 PHP

2022July18,2022continue、query相关、array_unique技术细节(一)Q1:continue之后的语句会被执行吗?答:没有。例1:分隔[0-9]区间内的奇偶数0,1=>2,2=>4,3=>6,4=>8]var_dump($odd);//[0=>1,1=>3,2=>5,3=>7]//调整语句$even[]=$i的位置后continue:$even=$odd=[];for($i=0;$i<9;$i++){如果($i%2==0){继续;$偶数[]=$i;}$奇数[]=$i;}var_dump($even);//[]var_dump($奇数);//[0=>1,1=>3,2=>5,3=>7]分析:将$even[]=$i的位置放在continue之后,存放偶数的数组为空。即continue之后的语句不会执行。示例2:当$i=2$i=0;while($i<4){if($i==2){$i++;时跳过循环;继续;}回声$我;//013$i++;}但是这里需要注意:continue前面的i++是必不可少的,如果少了会陷入死循环。因为continue之后的i++不会执行,所以i的值永远不会改变。$i=0;while($i<4){如果($i==2){继续;}回声$我;$i++;}//死循环(2)Q2:查询相关如果某条查询语句获取到数据,但有些字段的值为空,应该用哪个函数判断?答:用空的。try{$pdo=newPDO("mysql:host=localhost;dbname=test;",'root','root');$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);$sql="SELECT*FROMuserWHEREid=";$stmt=$pdo->准备($sql);$数据=[];如果($stmt->execute([21])){$data=$stmt->fetchAll(PDO::FETCH_ASSOC);}//var_dump($data);//二维数组[0=>['id'=21,'name'=>'','age'=>0]]$re=[];foreach($data[0]as$v){if(!empty($v)){$re[]=$v;}}var_dump($re);//[0=>'21']}catch(PDOException$e){echo$e->getMessage();}如果一个字段没有设置值,返回的结果中该字段的值为空字符串通过查询。需要注意的是,如果通过PDOStament::fetchAll()获取结果集中的数据,获取的是一个二维数组;empty(0)的结果为真。另外:boolPDOStatement::execute([array$input_parameters])执行准备好的语句并返回一个布尔值。(3)Q3:array_unique使用array_unique函数去重后,为什么有些key不存在?答:在去重的时候,重复的值(不是第一个)会被去掉,对应的key也会被去掉。用法:array_unique()函数用于去除数组中的重复值。如果两个或多个数组值相同,则只保留第一个值,去掉其他值。技术细节:去重,如果值重复,则保留第一个值,去除其他值,同时去除对应的key。示例:$arr=[1,1,"",1,"",2];var_dump(array_unique($arr));//结果:array(3){[0]=>int(1)[2]=>string(0)""[5]=>int(2)}发现数组的键只有0、2、5,其他键都去掉了。如果此时使用for遍历数组,会报错:$arr=[1,1,"",1,"",2];$uniques=array_unique($arr);for($i=0,$total=count($uniques);$i<$total;$i++){echo$uniques[$i]."\n";}//PHP注意:未定义偏移量:1inD:\PhpStudy\PHPTutorial\WWW\index\Questions\July2022\7-18.php解决方法:使用array_values函数获取数组的所有值,重新生成索引:$arr=[1,1,"",1,"",2];$uniques=array_values(array_unique($arr));for($i=0,$total=count($uniques);$i<$total;$i++){var_dump($uniques[$i]);}/*int(1)string(0)""int(2)*/