1 循环前判断空
例如:
if (count($list) > 0) {
foreach ($list as $v) {
// todo
}
}
foreach () 以及数组函数(array_ *)可以处理空数组
2 将代码封装到if里
例如:
foreach ($list as $user) {
if (!$user->disabled()) {
// 其他代码
//
}
}
所有主要方法应在第一个缩进
foreach ($list as $user) {
if ($user->disabled()) {
return;
}
// 其他代码
//
}
3 循环中执行查询
这样查询多次,效率低下
foreach (){
doSQL
}
选择sql查出之后再处理数据
doSQL
foreach (){
}
4 多次调用isset()
例如:
if (!isset($a)||!isset($b)||!isset($c)){
return;
}
isset()允许接收多个变量
if (!isset($a,$b,$c)){
return;
}
5 对isset()的误解
isset()不仅在变量不存在时返回false, 还会在变量值为null时返回false;
6 引用变量后未删掉, 造成不容易发现的bug
看一组循环
$arr = [1, 2, 3];
foreach ($arr as $v) {}
dump($arr);
foreach ($arr as &$v) { }// 引用遍历
dump($arr);
foreach ($arr as $v) {}
dump($arr);
输出:
foreach循环并不会产生一个块级作用域, $v就成了一个全部变量。遍历过程每次迭代都会形成对下一个元素的引用, $v会引用$arr的最后一个元素, 并保留在作用域。