2014-04-06 71 views
0

解決的問題,這是解決方案:PHP:的foreach - 返回的問題(後第一次出現)

function FinalTimeTestt() 
    { 
     $TimeCheckArray = makeTimeCheck(); 

     $TBool = true; 

     if(count($TimeCheckArray) >0) 
     { 
      foreach($TimeCheckArray as $TCA) 
      { 
       if($TCA['value'] != "true") 
       { 
        $TBool = false; 
        return array($TBool , $TCA['courseID'] , $TCA['day']); 
        break; 
       } 
       else 
       { 
        // do Nothing 
       } 
      } 
     } 
     else 
     { 
      return array($TBool); 
     } 

     return array($TBool); 
    } 

我有一個小問題,我的代碼和它的駕駛我瘋狂:

我想要通過一個多維數組,並且如果它的其中一個值是假的,它應該立即離開循環並返回該值 - 但是會中斷;似乎並不奏效及其返回true甚至儘管有 「假」

$ TimeCheckArray之一occurence給出了這樣的:

陣列([0] =>陣列([courseID] => comp248 [數組([courseID] => comp248 [day] => monday [value] => true)[2] => comp345 [天] =>週一[值] =>假))

function FinalTimeTestt() 
    { 
     $TimeCheckArray = makeTimeCheck(); 

     if(count($TimeCheckArray) >0) 
     { 
      foreach($TimeCheckArray as $TCA) 
      { 
       if($TCA['value'] == "true") 
       { 
        return array(true); 
       } 
       else 
       { 
        return array(false , $TCA['courseID'] , $TCA['day']); 
        break; 
       } 
      } 
     } 
     else 
     { 
      return array(true); 
     } 
    } 

我使用這樣的功能:

$hhhBool = FinalTimeTestt(); 

if($hhhBool[0]) 
{ 
    echo "true"; 
} 
else 
{ 
    echo "false"; 
} 

它返回true,即使在上面的數組中有一個值「false」。

回答

0

FinalTimeTestt()將返回array(true),因爲它從來沒有得到過去的第一個元素$TimeCheckArray陣列 - if語句的兩個分支在foreach環形折返。第一次迭代看Array ([courseID] => comp248 [day] => monday [value] => true)value密鑰的值爲true,因此$TCA['value'] == "true"的計算結果爲真,因此return array(true);已執行,並且該函數在此處結束。在return聲明後面使用break表明您不太瞭解後者的功能。

我想你想你的foreach循環的身體是這個樣子:

if ($TCA['value'] != 'true') { 
    return array(false, $TCA['courseID'], $TCA['day']); 
} 
+0

阿感謝 - 沒有意識到的是,如果我刪除第一回 - 將它不斷循環,直到達到一個假值? – Jimmy

+0

是的 - 請參閱我的編輯。 –

+0

已更新我的代碼,它的工作原理 - 請參閱上面的解決方案 – Jimmy