Key*_*eyo 115 php coding-style
这不是一个主要问题,但我想知道是否有更清洁的方法来做到这一点.最好避免使用不必要的if语句嵌套我的代码.如果$items
是空的php会抛出错误.
$items = array('a','b','c');
if(!empty($items)) { // <-Remove this if statement
foreach($items as $item) {
print $item;
}
}
Run Code Online (Sandbox Code Playgroud)
我可能只是使用'@'错误抑制器,但这有点hacky.
Chr*_*ian 195
有一百万种方法可以做到这一点.
假设你有一个数组,那么第一个就是继续运行数组通过foreach.
在其他情况下,这是您可能需要的:
foreach ((array) $items as $item) {
print $item;
}
Run Code Online (Sandbox Code Playgroud)
注意:对于所有抱怨类型转换的人,请注意OP 如果数组为空,则要求最简洁的方法跳过foreach(重点是我的).值true,false,数字或字符串不被视为空.此外,这将适用于实现对象\Traversable
,is_array
但不起作用.
Mat*_*son 26
$items = array('a','b','c');
if(is_array($items)) {
foreach($items as $item) {
print $item;
}
}
Run Code Online (Sandbox Code Playgroud)
You*_*nse 26
最好的方法是在使用前初始化每个血腥变量.
它不仅解决了这个愚蠢的"问题",但也为你节省大量的真正的头痛.
所以,引入$ items $items = array();
就是你真正想要的.
Zac*_*ner 15
我不建议抑制警告输出.但是,我建议使用is_array
而不是!empty
.如果$items
恰好是非零标量,那么foreach
如果你使用它仍然会出错!empty
.
如果您需要的变量可能是boolean false
- 例如.当没有从数据库返回记录时array
- 或者当返回记录时,您可以执行以下操作:
foreach (($result ? $result : array()) as $item)
echo $item;
Run Code Online (Sandbox Code Playgroud)
(Array)$result
当变量boolean false
不是你想要的那样时,使用cast()的方法会产生一个count数组.
我认为这里最好的方法是规划你的代码,以便$ items总是一个数组.最简单的解决方案是使用$ items = array()在代码顶部初始化它.这样,即使您没有为其分配任何值,它也将表示空数组.
所有其他解决方案对我来说都非常糟糕.