【问题标题】:PHP Return true in foreachPHP在foreach中返回true
【发布时间】:2017-11-27 23:20:06
【问题描述】:

我想检查用户是否使用默认设置。在下面的示例中,我正在尝试检查是否所有“foreached”项目都返回true。如果单个 foreached 项未返回 true,则在整个函数上返回 false

private function is_using_default_settings() {
    // returns a huge array with settings
    $merged_preset = $this->options_merged();

    foreach($merged_preset as $preset) {
        if($preset[5] == 1) {
            $section = 'general';
        } elseif($preset[5] == 2) {
            $section = 'advanced';
        } elseif($preset[5] == 3) {
            $section = 'technical';
        }

        $option = get_option($section);

        if($preset[3] == $option[$preset[0]] && !is_null($preset[1])) {
            return true;
        }
    }

    return false;
}

过去几天我一直在集思广益,想自己解决这个问题,但遗憾的是无法让它发挥作用。最好的方法是什么?

【问题讨论】:

  • 实际上是您自己编写的:如果单个 foreached 项目不返回 true,则返回 false - 在您的 foreach 中测试 false(例如,切换您的逻辑) 并在任何项目不匹配时返回 false。如果全部匹配,则在函数结束时返回 true。
  • 你需要换个角度看。 return false 如果一个不匹配,只有在循环完成时 return true。这样,如果 any 部分为 false,它将返回 false。
  • $preset[5] 不是 1、2 或 3 时会发生什么?有可能吗?

标签: php arrays methods foreach return


【解决方案1】:

当 foreach 中的任何检查失败时,您应该返回 false,否则返回 true。

function check()
{
  foreach($arr as $v)
  {
     //check fails
     if(fail of the check) 
         return false;
  }
  return true;
}

【讨论】:

    【解决方案2】:

    您可以检查何时为假并阻止完整的foreach然后返回值,如果一切都为真则返回值为真

    试试这个:

    private function is_using_default_settings() {
        $returnValue = true;
        $merged_preset = $this->options_merged();
    
        foreach($merged_preset as $preset) {
            if($preset[5] == 1) {
                $section = 'general';
            } elseif($preset[5] == 2) {
                $section = 'advanced';
            } elseif($preset[5] == 3) {
                $section = 'technical';
            }
    
            $option = get_option($section);
    
            if($preset[3] != $option[$preset[0]] || is_null($preset[1])) {
                $returnValue = false;
                break;
            }
        }
    
        return $returnValue;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2015-09-01
      • 1970-01-01
      • 2014-09-25
      相关资源
      最近更新 更多