如果foreach方法内的所有方法调用都返回true,则PHP返回true

如果foreach方法内的所有方法调用都返回true,则PHP返回true,php,Php,我在使用foreach时遇到了一个问题,实际上,如果foreach循环中的if语句返回true,那么我的方法应该返回true。然而,问题是该语句只对数组中的第一个元素执行,而不是对整个数组执行。我试着搜索,但我找不到问题的明确答案。这是我的代码片段 public function SaveDisplayOrder($aUnitCustomField) { var_dump($aUnitCustomField); foreach($aUnitCustomField as $pUni

我在使用foreach时遇到了一个问题,实际上,如果foreach循环中的if语句返回true,那么我的方法应该返回true。然而,问题是该语句只对数组中的第一个元素执行,而不是对整个数组执行。我试着搜索,但我找不到问题的明确答案。这是我的代码片段

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
,而不是返回这样的数组。只是一个想法。