如果foreach方法内的所有方法调用都返回true,则PHP返回true
我在使用foreach时遇到了一个问题,实际上,如果foreach循环中的if语句返回true,那么我的方法应该返回true。然而,问题是该语句只对数组中的第一个元素执行,而不是对整个数组执行。我试着搜索,但我找不到问题的明确答案。这是我的代码片段如果foreach方法内的所有方法调用都返回true,则PHP返回true,php,Php,我在使用foreach时遇到了一个问题,实际上,如果foreach循环中的if语句返回true,那么我的方法应该返回true。然而,问题是该语句只对数组中的第一个元素执行,而不是对整个数组执行。我试着搜索,但我找不到问题的明确答案。这是我的代码片段 public function SaveDisplayOrder($aUnitCustomField) { var_dump($aUnitCustomField); foreach($aUnitCustomField as $pUni
public function SaveDisplayOrder($aUnitCustomField)
{
var_dump($aUnitCustomField);
foreach($aUnitCustomField as $pUnitCustomField)
{
if (CUnitCustomFieldsTable::SaveUnitCustomField($pUnitCustomField))
{
return true;
}
}
return false;
}
因此,如果
SaveUnitCustomField
方法对$aUnitCustomField
的第一个元素返回true并停止执行,那么如何检查整个$aUnitCustomField
数组的SaveUnitCustomField
。您知道什么比“失败”更好吗?“这些具体的事情失败了”,所以你可以采取实际行动
public function SaveDisplayOrder( $aUnitCustomField ) {
$returnValue = true;
$errors = [];
foreach( $aUnitCustomField as $pUnitCustomField ) {
if ( ! CUnitCustomFieldsTable::SaveUnitCustomField($pUnitCustomField) ) {
$returnValue = false;
$errors[] = "Error when saving $pUnitCustomField";
}
}
return [$returnValue, $errors];
}
我唯一要改变的是,如果存在一个空的错误数组就足以确定
returnValue
的状态,我还会添加一个带有字段名的键。但可以肯定的是,一系列的错误才是解决之道……@ArtisticPhoenix我宁愿让整个过程由异常驱动。比较起来,像我刚才写的那样复杂的返回类型感觉很脏。@Sammitch感谢这种解决方案,但我必须使用array_push在$errors
中插入值,并首先声明$errors=array()我通过将$returnValue
和$errors
推入一个新数组来返回。不确定这是否是一个问题,因为我使用的是PHP5.3。您也可以将错误写入$this->errors
,而不是返回这样的数组。只是一个想法。