我有一个包含多个键的数组,我想确保它们都是我想要的格式。例如,如果它们都是ISO Alpha-2国家代码,我创建了一个返回true或false的函数来测试它。
基本上,我想用一行替换这个foreach:
$countriesList = ['US', 'FR', 'CA'];
$correct = true;
foreach ($countriesList as $iso2) {
if (!$this->isIso2($iso2)) {
$correct = false;
}
}
答案 0 :(得分:0)
如果您确实想要通过一次通话取代foreach
,您可以使用 array_walk ,如下所示:
$countriesList = ['US', 'FR', 'CA'];
$correct = true;
array_walk( $countriesList, function( $country ) use (&$correct) { $correct = $correct && $this->isIso2( $country ); } );
语句use (&$correct)
允许内联回调访问$correct
变量(否则将超出回调范围)。
注意:
您的原始代码中没有问题。
它可读,简洁,我没有看到任何明显的性能缺陷。
我只需添加一个break;
来第一次终止循环" false case"找到了。没有理由继续迭代:
if (!$this->isIso2($iso2)) {
$correct = false;
break; // <--- EXIT THE LOOP
}
在制作中,我肯定会坚持使用foreach
方法。
无论如何,作为编程练习,我的答案开头的解决方案会减少一次通话的循环。
array_walk
遍历数组的所有项。对于每个项目,调用内联回调函数,并将当前项目作为第一个参数传递。