php提高多层循环的逻辑速度,循环中的逻辑陷阱

循环是个好东西,用循环加几条简单的语言可以实现处理多条数据的功能,充分展示了计算机是为人民服务的。但是如果利用不好,和谐社会便被打破了。现举两个陷阱。

一:双重循环中建立的临时变量。

首先临时变量就是临时的,不能和全局变量起重名,除非这个全局变量是个全局的临时变量(随用随赋值)。这一点在需要临时变量与某个变量做比较操作时尤为重要。现在举一个双重循环的例子:

以下是代码片段:

foreach($arr0 as $k0 => $arr1)

{

foreach($arr1 as $k1 => $v1)

{

$total +=$v1;

}

if($total > 1000)

{

echo "No !\n";

}

}

如果你只是想单独分析数据$arr1,那很遗憾这个程序的结果是失败的。因为$total的值会被下一次循环继续累加,然后在判断大小的时候会一路报错。如果你在第二次循环前把$total置0就OK了。

二:有序值查漏的陷阱。

我想,这是思维严谨的问题。

但一个有序排列的数组,我们可以简化为一个数字为键的数组$arr。原始数组是否有序是无所谓了,因为有ksort()函数,可以帮助我们排序。这个数字有序但不连续,例如键为:1、2、6、7,中间漏了3、4、5,现在弄个程序找出来。

假定数组的键起点为0,终点以$arr为准。我一拍脑袋,写下如下程序:

以下是代码片段:

$i = 0;

foreach($arr as $k => $v)

{

if($i++ != $v)

{

echo "$v | ";

}

}

此程序的恶果为,一旦遇到不连续的键,以后的键值都被认作不连续了,原因在于$i的自增方式有问题。你可以自己实践一下加强体验。

有效的程序如下,用while我们可以避免风险。

以下是代码片段:

$i = -1;

foreach ($arr as $k => $v)

{

while(++$i != $k)

{

echo "$i | ";

}

}

当然,实际程序中还得考虑$i溢出的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值