2015-09-15 24 views
1

如何重構此代碼片段以將縮進級別降低一級? 我只是想知道是否有可能在PHP中以不同的方式編寫此代碼,只有一個縮進級別。如何降低給定PHP代碼段中的縮進級別

代碼:

private function isArrayMatchingCriteria(array $array) { 
    foreach($array as $element) { 
     if (! $this->isElementMatchingCriteria($element) { 
      return false; 
     } 
    } 
    return true; 
} 

請考慮,即:

  • 這個代碼不總是在遍歷所有數組元素 - 這樣算的組合+ array_filter/array_map不相同
  • 通過引入專用對象屬性作爲標誌很容易做到,但我在尋找一種不引入新屬性的方式
+0

我有點糊塗;是不是這個函數只會返回true或false到傳入的數組的第一個元素?你爲什麼需要foreach? – Adunahay

+1

這真的是一個需要解決的問題嗎?看起來像最直接的解決方案。有兩個級別的縮進是沒有什麼可以失眠或發佈有關IMO的SO問題。 – deceze

+1

@Adunahay - 不,它不會。只有在方法'isElementMatchingCriteria'對給定數組的每個元素返回true時它才返回true。否則爲假。 – Luigi

回答

0

如果你只是希望刪除縮進,你可以使用:

private function isArrayMatchingCriteria(array $array) { 
    foreach($array as $element) { 
     if (!$this->isElementMatchingCriteria($element)) return false; 
    } 
    return true; 
} 
+0

不,我'對不起。我知道我可以做到這一點,但它不符合PSR-2標準。 – Luigi

0

使用array_map,這樣的事情:

class MyClass 
{ 
    private function isElementMatchingCriteria($element) 
    { 
     // DUMMY, replace with actual code 
     if ($element == "foo" || $element == "bar") { 
      return true; 
     } else { 
      return false; 
     } 
    } // end is Element Matching Criteria 

    public function isArrayMatchingCriteria(array $array) 
    { 
     $results = array_map(array($this, "isElementMatchingCriteria"), $array); 
     $isMatch = true; 
     foreach ($results as $result) { 
      $isMatch = $isMatch && $result; 
     } // end foreach 
     return $isMatch; 
    } // end function isArrayMatchingCriteria 
} // end MyClass 

$myClass = new MyClass(); 
$array = array("foo", "bar", "baz"); 
$result = $myClass->isArrayMatchingCriteria($array); 
print_r($result);